【问题标题】:Node.js Object object has no method 'hasOwnProperty'Node.js 对象对象没有方法“hasOwnProperty”
【发布时间】:2013-05-11 05:09:34
【问题描述】:

不知道为什么我的对象中似乎缺少hasOwnProperty()...

我正在从 expressjs3 中的 http 帖子中获取数据,如下所示:

someControllerFunction: function(req, res){
            var data = req.body.loc;
...
}

如果我这样做:

data.hasOwnProperty('test'); 

我明白了:

Object object has no method 'hasOwnProperty' 

也许我遗漏了一些明显的东西,但是什么?

(节点 10.5,Express 3.2.1)

【问题讨论】:

  • 我测试并注意到 req 对象(以及 req.body)从 Express v3.4.8 开始允许 .hasOwnProperty(而我在之前的版本中也注意到了这个问题。) (我无法从Express releases 看出哪个更新修复了这个问题,因为在 v3.5.3 之前没有记录更改日志。)

标签: javascript node.js express


【解决方案1】:

该对象可能没有Object.prototype 作为其原型。

如果对象是用...创建的,就会出现这种情况

var data = Object.create(null);

你可以使用...

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

...测试属性是否存在。

【讨论】:

  • Object.hasOwnProperty.call(data, "test") 更短,也同样有效。这通常被认为是调用 hasOwnProperty 的安全方式,因为 hasOwnProperty 可能确实不存在,或者可能在所考虑的对象中被赋予不同的值。
  • @MerynStol 如果你追求的是短暂,你可以使用"".hasOwnProperty.call(data, "test") :)
  • @alex 谢谢 - 我会使用你建议的安全测试。仍然 - 我觉得由 express body 解析器创建的对象没有正确设置原型非常奇怪。也许这是一个错误 - 我也会和快递员一起发帖。
  • @alex 是的,但实际上构造一个对象(分两个阶段,首先是(原始)字符串,然后是字符串)对我来说有点太过分了。
  • @MerynStol 确实,我绝不会推荐任何人使用它。 Object.prototypeObject 稍微好一点的地方是它不需要遍历原型链,尽管这几乎无关紧要。
【解决方案2】:

这个技巧对我有用:

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

【讨论】:

  • 为了在原型上获得Object.prototype 需要做很多工作。
  • 这根本不是一个好习惯,那些 JSON 函数是昂贵的操作。
猜你喜欢
  • 2011-12-30
  • 2019-01-30
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多