for..in 循环及 hasOwnProperty

for..in 循环及 hasOwnProperty_第1张图片
for in 不能循环动态属性 this.xxx
for in 忽略原型 prototype;
for in 可以循环原型链 __proto__(优先级别最低);
for in 忽略 enumerable: undefined|null|false|0
hasOwnProperty 可以过滤原型链 proto
hasOwnProperty 不可以过滤 enumerable 为真的属性

function F() {
    this.p0 = 'this.p0';
}

F.__proto__.p1 = 'f.__proto__.p1';
F.p2 = 'f.p2';
F.prototype.p3 = 'f.prototype.p3';
Object.defineProperty(F, 'p4', {value: 'defineProperty enumerable: undefined'});
Object.defineProperty(F, 'p5', {value: 'defineProperty enumerable: true', enumerable: true});

for (var k in F) {
    console.log('hasOwnProperty:', F.hasOwnProperty(k), '\t', k, '->', F[k]);
}

你可能感兴趣的:(javascript,前端)