用for-in循环遍历非数组对象时一些值得注意的现象(hasOwnProperty的使用)

对于非数组对象,遍历方法似乎只有使用for-in循环,但是使用for-in会遍历出一些意料之外的东西,请看下面这些现象:

Object.cre = 'Obj.cre';
Object.prototype.abc = 'Obj-abc';
Object.prototype.bcd = 'Obj-bcd';
Function.prototype.abc = 'Fn-abc';
Function.prototype.bcd = 'Fn-bcd';
Function.prototype.test = 'Fn-test';
var k,
    o = {},
    f = function(){};
f.prototype.abc = 'f-abc';
f.prototype.cde = 'f-cde';
f.test = 'f.test';

for(k in o){
    alert(o[k]); //依次弹出Obj-abc、Obj-bcd
    //o.hasOwnProperty(k) && alert(o[k]); //无弹出
}
alert('br1');
for(k in f){
    alert(f[k]); //依次弹出f.test、Fn-abc、Fn-bcd
    //f.hasOwnProperty(k) && alert(f[k]); //弹出f.test
}
var fp = f.prototype;
alert('br2');
for(k in fp){
    alert(fp[k]); //依次弹出f-abc、f-cde、Obj-bcd
    //fp.hasOwnProperty(k) && alert(fp[k]); //依次弹出f-abc、f-cde
}
所以,为了保证遍历结果在我们的预期之内,for-in一定要使用hasOwnProperty进行判断,而对于数组遍历一定不要使用for-in。

所以个人强烈反对对原生Object、Function等的prototype进行扩展!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值