JS中的每个对象都有一个toString()方法吗?

在这里输入图像描述

在这里输入图像描述

如果那是真的,为什么这个错误发生? req.body对象不是nullundefined如图所示。

我使用node-inspector来debugging我的express.js应用程序,这张照片是在Chrome Developer Tools拍摄的。

快速configuration:

app.use(express.bodyParser())

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

在这里输入图像描述

如何重新签署一个正确的toString方法?

我试过delete未定义的toString ,没有好处。 看到:

在这里输入图像描述

JS中的每个对象都有一个toString()方法吗?

不,只有那些从Object.prototypeinheritance它(像所有常规对象那样)或者自己定义它(或者从它们的定制原型inheritance它)的。

你可以通过Object.create(null)来创build这种不寻常的对象。 你也可以给一个普通的对象一个自己的toString属性,它会隐藏inheritance的属性,而不是一个函数(例如{toString:0} ),但是我想这会导致一个明显的错误。

在你的情况下, bodyParser()使用的查询string分析器似乎确实(没有)创build没有原型的对象,以避免在使用这些参数时.constructor.prototype 。 请参阅qs pullrequest#58并表示问题1636: Bodyparser未设置object.prototype? (build议更新)。

如何重新分配一个正确的toString方法?

你可以指定任何function,如

 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)