我们使用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];
}
}
答案 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
。