我正在迭代一组简单(JSON样式)对象,其中一些具有给定属性,而另一些则没有。如果他们拥有该属性,可以安全地假设它永远不会评估为假值。
var objs = [
{'a': 1, 'b': 2, 'c': 3},
{'a': 4, 'b': 5},
{'a': 7, 'b': 8, 'c': 9}
];
我相当大的应用程序在Internet Explorer 8中触发了一些(非常无用的)错误,因此我只想将其从潜在问题列表中删除。使用安全:
for (var i = 0; i < objs.length; ++i) {
if (objs[i].c) {
// objs[i].c is defined
}
}
我在应用程序代码中多次使用过这种检查,但我是否需要使用obj.hasOwnProperty('c')
或typeof obj.c != 'undefined'
?
感谢。
答案 0 :(得分:2)
......可以安全地假设它永远不会评估为假值。
不,这不安全。如果您有{'a': 1, 'b': 2, 'c': 0}
之类的对象,objs[i].c
将被评估为假。 (或c
等于false
,NaN
,null
,undefined
或''
。)
如果您只是想知道,如果对象中定义了属性,您可以'c' in objs[i]
,但要注意,这也将包括原型链中的属性。
如果您想避免从原型链中获取属性,则需要进行hasOwnProperty
检查。
现代浏览器中也有Object.keys
可用,但它在快速检查方面并不方便。
答案 1 :(得分:1)
我认为下面的一个很好,可以检查特定对象是否具有属性。我也经常在Web应用程序上使用这种方法。
obj.hasOwnProperty('c')