我们使用for in如下迭代对象
var object = { "a":"foo", "b":"bar"}
for (var key in object) {
var element = object[key];
}
Run Code Online (Sandbox Code Playgroud)
我见过我的老年人建议我在实际访问之前检查属性是否存在.为什么?因为如果一个for in给我一把钥匙就意味着它存在......
我为什么要这样写for in:
for (var key in object) {
if (object.hasOwnProperty(key)) {
var element = object[key];
}
}
Run Code Online (Sandbox Code Playgroud)
如果只想要该对象的属性,则需要使用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);
}
}Run Code Online (Sandbox Code Playgroud)
看看,在检查之后hasOwnProperty,我们传递key来自prototype(c)的那个.