一尘不染

JS中的每个对象是否都有toString()方法?

node.js

在此处输入图片说明

在此处输入图片说明

如果是这样,为什么会发生此错误?该req.body对象不是nullundefined如图所示。

我使用node-inspector调试我的express.js应用,这张照片摄于Chrome Developer Tools

快速配置:

app.use(express.bodyParser())

感谢您的意见,现在我发现req.bodyundefined,但新的问题是,如何使toString再次作品?我想req.body.toString()返回如下字符串:

在此处输入图片说明

如何重新签署适当的toString方法?

我尝试delete了undefined toString,不好。看到:

在此处输入图片说明


阅读 411

收藏
2020-07-07

共1个答案

一尘不染

JS中的每个对象是否都有toString()方法?

否。只有那些继承自Object.prototype(如所有普通对象一样)或自行定义(或从其自定义原型继承)的人才可以。

您可以通过创建此类异常对象Object.create(null)。您还可以给一个普通对象一个自己的toString属性,该属性遮盖继承的属性,而不是一个函数(例如{toString:0}),但是我想那会抛出一个明显的错误。

在您的情况下,dosbodyParser()(did)使用的查询字符串解析器似乎确实创建了没有原型的对象,以避免.constructor.prototype在使用此类参数时造成混乱。请参阅qs
pullrequest#58
表达问题1636:
Bodyparser没有设置object.prototype?

(建议更新)。

如何重新分配适当的toString方法?

您可以分配任何功能,例如

req.body.toString = function() { return "Hi, I'm a request body"; };

但您可能想要标准的:

req.body.toString = Object.prototype.toString;

其他选择是通过非标准__proto__属性(req.body.__proto__ = Object.prototype)重新定义原型,或者只是在对象上应用独立函数,而不是将其作为方法,例如Object.prototype.toString.call(req.body)

2020-07-07