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

javascript中,for循环最好用for..in还是i < array.length?

javascript中,for循环最好用for..in还是i < array.length?

哔哔one 2019-04-08 11:18:18
由于forEach没有直接可用的break,所以循环还是只好靠for。我一直觉得简单的更好,所以更倾向for..in来遍历数组,但是webstorm中会warning。如果不应该用for..in来遍历,请告诉我为什么。代码举例:vararray=[1,2,3,4,5];for(vari=0;i
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

一个最简单常见的,为何不要用forin循环遍历数组的例子,是使用了诸如modernizr的库,做了IE6~8的ECMAScript5的Array对应方法的原型扩展的shim的情形。
比如,Array.prototype.forEach=function(){}
forin循环遍历,遍历的是可枚举的自身属性和继承属性,这意味着你的原型链上的扩展方法都会被遍历到,而在上述情形下,肯定会出现你不想要的结果。
示例:
vara=[1,2,3];
vargetEnumPropertyNames=function(obj){
varprops=[];
for(propinobj){
props.push(prop);
}
returnprops;
}
以下是调用结果:
getEnumPropertyNames(a)
->["0","1","2"]
Array.prototype.newFunc=function(){};getEnumPropertyNames(a)
->["0","1","2","newFunc"]
阅读更多:
紫云飞:《JavaScript中的属性:如何遍历属性》
张鑫旭:《ES5中新增的Array方法详细说明》(及其shim)
modernizr库
                            
查看完整回答
反对 回复 2019-04-08
?
MMMHUHU

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

针对LZ给出的例子,最好选择第一种for...in的方式遍历。
varscores=[98,74,85,77,93,100,89];
vartotal=0;
for(varscoreinscores){
total+=score;
}
varmean=total/scores.length;
//mean=17636.571428571428
针对数字型数组,第一种for...in总是能正确枚举key,而第二种会发生意想不到的事情,因为第二种适合遍历对象,而对象的key是字符串!
推荐阅读:《EffectiveJavaScript》
Item49:PreferforLoopstofor...inLoopsforArrayIteration
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信