Javascript Node.js对象没有方法';拥有自己的财产';

Javascript Node.js对象没有方法';拥有自己的财产';,javascript,node.js,express,Javascript,Node.js,Express,不确定为什么我的对象中似乎缺少hasOwnProperty() 我从expressjs3中的http post获取数据,如下所示: someControllerFunction: function(req, res){ var data = req.body.loc; ... } 但是,如果我这样做: data.hasOwnProperty('test'); 我得到: Object object has no method 'hasOwnProperty' 也许

不确定为什么我的对象中似乎缺少
hasOwnProperty()

我从expressjs3中的http post获取数据,如下所示:

someControllerFunction: function(req, res){
            var data = req.body.loc;
...
}
但是,如果我这样做:

data.hasOwnProperty('test'); 
我得到:

Object object has no method 'hasOwnProperty' 
也许我遗漏了一些明显的东西,但是什么呢?


(节点10.5,Express 3.2.1)

对象可能没有
对象。原型作为其原型

如果对象是使用…创建的,则会出现这种情况

var data = Object.create(null);
你可以用

Object.prototype.hasOwnProperty.call(data, 'test');

…以测试该属性是否存在。

此黑客程序适用于我:

req.body = JSON.parse(JSON.stringify(req.body));

Object.hasOwnProperty.call(data,“test”)
较短,同样有效。这通常被认为是调用hasOwnProperty的安全方法,因为hasOwnProperty可能确实不存在,或者在考虑中的对象中可能会被赋予不同的值。@MerynStol如果您所追求的是shortness,则可以使用
“”.hasOwnProperty.call(数据,“测试”)
:)@alex谢谢-我将使用您建议的安全测试。尽管如此,我还是觉得很奇怪,由ExpressBody解析器创建的对象没有正确地设置原型。也许这是一个bug——我也会和express guys一起发布。@alex是的,但实际上构造一个对象(分两个阶段,首先是一个(基本的)字符串,然后是一个字符串)对我来说有点太过分了。@MerynStol确实如此,我从不推荐任何人使用它。关于
对象,prototype
对象
稍微好一点的地方是它不需要遍历原型链,尽管这几乎不重要。我测试并注意到
req
对象(以及
req.body
)允许
。从expressv3.4.8开始,hasOwnProperty
(虽然我在以前的版本中也注意到了这个问题。)(我无法从哪个更新中判断这一点,因为在v3.5.3之前没有注意到变更日志。)这需要做大量的工作才能在原型上获得
Object.prototype
。这根本不是一个好的实践,那些JSON函数是昂贵的操作。