您的位置:首页 > 运维架构

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

2012-10-28 18:23 423 查看
对于非数组对象,遍历方法似乎只有使用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进行扩展!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: