JavaScript迭代对象属性和原型链

时间:2015-07-04 20:42:47

标签: javascript inheritance prototype prototypal-inheritance prototype-chain

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。为什么呢?

3 个答案:

答案 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主题的文章,以加深您的知识。