使用for-in迭代对象时,是否需要检查hasOwnProperty?

时间:2017-08-16 11:34:32

标签: javascript

我们使用for in迭代一个对象,如下所示

var object = { "a":"foo", "b":"bar"}

for (var key in object) {
   var element = object[key];
}

我见过我的老人建议我在实际访问之前检查属性是否存在。为什么?因为如果for in给了我一把钥匙,那就意味着它存在......

我为什么要写下for in,如下所示:

for (var key in object) {
    if (object.hasOwnProperty(key)) {
        var element = object[key];            
    }
}

1 个答案:

答案 0 :(得分:5)

如果只想要该对象的属性,则需要使用hasOwnProperty函数。如果没有该检查,您还将获得从该对象的原型获得的属性。

参见示例

var object = { "a":"foo", "b":"bar"};

for (var key in object) {
   console.log(key);
}

Object.setPrototypeOf(object,{ "c" : "gar"});

console.log('After setting prototype');

for (var key in object) {
   console.log(key);
}

console.log('Using hasOwnProperty');

for (var key in object) {
   if(object.hasOwnProperty(key)){
      console.log(key);
   }
}

看看,在使用hasOwnProperty核对后,我们会传递原型(key)中的c