[英]JavaScript iterating over object properties and the prototype chain
MDN声明:
此外,当迭代对象的属性时,原型链上的每个可枚举属性都将被枚举。
所以我试过这个:
var x = {a: "I am a"};
var z = Object.create(x);
for( i in z )
{
console.dir( i );
if( i == "hasOwnProperty" ) {
console.log( 'found hasOwnProperty' );
}
}
只输出a
但不输出hasOwnProperty
。 为什么?
因为Object.prototype.hasOwnProperty
是不可枚举的:
Object.getOwnPropertyDescriptor(Object.prototype, 'hasOwnProperty')
.enumerable // false
因此,它不会被for...in
循环迭代。
由于hasOwnProperty不可枚举,您可以使用
console.log(Object.getOwnPropertyDescriptor(Object.prototype, "hasOwnProperty").enumerable)
如上所述,对象的每个属性都有一个“可枚举”标志。 当标志设置为 false 时,在迭代对象属性时将不会枚举该属性。
Object.prototype.hasOwnProperty 是不可枚举的,这意味着 'enumerable' 标志设置为 false。
你可以在这里阅读我写的一篇关于这个主题的文章来加深你的知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.