JavaScript迭代对象属性和原型链

Rob*_*cha 2 javascript inheritance prototype prototypal-inheritance 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' );
    }
}
Run Code Online (Sandbox Code Playgroud)

仅输出a但不输出hasOwnProperty.为什么?

Ori*_*iol 7

因为Object.prototype.hasOwnProperty是不可枚举的:

Object.getOwnPropertyDescriptor(Object.prototype, 'hasOwnProperty')
  .enumerable // false
Run Code Online (Sandbox Code Playgroud)

因此,它不会被for...in循环迭代.