为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在数组迭代中使用“for ... in”是一个坏主意?

为什么在数组迭代中使用“for ... in”是一个坏主意?

慕少森 2019-05-20 17:15:10
我被告知不要for...in在JavaScript中使用数组。为什么不?
查看完整描述

4 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您不应该使用for..in迭代数组元素的原因有三个:

  • for..in将循环遍历数组对象的所有自己和继承的属性,而不是DontEnum; 这意味着如果有人将属性添加到特定的数组对象(有正当理由 - 我自己这样做了)或更改了Array.prototype(这在代码中被认为是不好的做法,应该可以很好地与其他脚本一起工作),这些属性将会也要迭代; 可以通过检查来排除继承的属性hasOwnProperty(),但这对于在数组对象本身中设置的属性没有帮助

  • for..in 不保证保留元素排序

  • 它很慢,因为你必须遍历数组对象及其整个原型链的所有属性,并且仍然只获取属性的名称,即获取值,将需要额外的查找


查看完整回答
反对 回复 2019-05-20
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

因为...枚举通过保存数组的对象,而不是数组本身。如果我向数组原型链添加一个函数,那么它也将被包含在内。即


Array.prototype.myOwnFunction = function() { alert(this); }

a = new Array();

a[0] = 'foo';

a[1] = 'bar';

for(x in a){

 document.write(x + ' = ' + a[x]);

}

这将写:


0 = foo

1 =吧

myOwnFunction = function(){alert(this); }

因为你永远不能确定什么都不会被添加到原型链中,只需使用for循环来枚举数组:


for(i=0,x=a.length;i<x;i++){

 document.write(i + ' = ' + a[i]);

}

这将写:


0 = foo

1 =吧


查看完整回答
反对 回复 2019-05-20
  • 4 回答
  • 0 关注
  • 489 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号