for..in 循环及 hasOwnProperty

for..in 循环及 hasOwnProperty

for in 不能循环动态属性 this.xxx
for in 忽略原型 prototype;
for in 可以循环原型链 proto__proto__.p1);
for in 忽略被覆盖的链属性(__proto__.p4&5
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';  //原型属性
F.__proto__.p4 = 'f.__proto__.p4';  //链属性被下面的 p4 覆盖
Object.defineProperty(F, 'p4', {value: 'defineProperty enumerable: undefined'});
Object.defineProperty(F, 'p5', {value: 'defineProperty enumerable: true', enumerable: true});
F.__proto__.p5 = 'f.__proto__.p5';  //链属性被上面的 p5 覆盖

for (var k in F) {
    console.log('hasOwnProperty:', F.hasOwnProperty(k), '\t', k, '->', F[k]);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
48
粉丝
14
喜欢
124
收藏
101
排名:134
访问:3.7 万
私信
所有博文