if(obj.nonExistentProperty)是否会触发任何浏览器错误?

时间:2014-01-22 18:55:52

标签: javascript definition typeof hasownproperty

我正在迭代一组简单(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'

感谢。

2 个答案:

答案 0 :(得分:2)

  

......可以安全地假设它永远不会评估为假值。

不,这不安全。如果您有{'a': 1, 'b': 2, 'c': 0}之类的对象,objs[i].c将被评估为假。 (或c等于falseNaNnullundefined''。)

如果您只是想知道,如果对象中定义了属性,您可以'c' in objs[i],但要注意,这也将包括原型链中的属性。

如果您想避免从原型链中获取属性,则需要进行hasOwnProperty检查。

现代浏览器中也有Object.keys可用,但它在快速检查方面并不方便。

答案 1 :(得分:1)

我认为下面的一个很好,可以检查特定对象是否具有属性。我也经常在Web应用程序上使用这种方法。

 obj.hasOwnProperty('c')