1

我正在遍历一组简单的(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')ortypeof obj.c != 'undefined'吗?

谢谢。

4

2 回答 2

2

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

不,这不安全。如果你有一个像 , 的对象{'a': 1, 'b': 2, 'c': 0}objs[i].c将被评估为虚假。(或c等于false、、、NaN或。nullundefined''

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

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

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

于 2014-01-22T19:14:00.633 回答
1

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

 obj.hasOwnProperty('c') 
于 2014-01-22T19:01:05.010 回答