繁体   English   中英

JavaScript 迭代对象属性和原型链

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM