MDN州:
此外,在迭代对象的属性时,将枚举原型链上的每个可枚举属性。
所以我尝试了这个:
max
仅输出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
。为什么呢?
答案 0 :(得分:7)
因为Object.prototype.hasOwnProperty
是不可枚举的:
Object.getOwnPropertyDescriptor(Object.prototype, 'hasOwnProperty')
.enumerable // false
因此,它不会被for...in
循环迭代。
答案 1 :(得分:1)
因为 hasOwnProperty 不可枚举,您可以使用
进行测试console.log(Object.getOwnPropertyDescriptor(Object.prototype, "hasOwnProperty").enumerable)
答案 2 :(得分:0)
如上所述,对象的每个属性都有一个“可枚举”标志。如果将该标志设置为false,则在遍历对象属性时将不会枚举该属性。
Object.prototype.hasOwnProperty是不可枚举的,这意味着“可枚举”标志设置为false。
您可以阅读我写的关于here主题的文章,以加深您的知识。