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

由于forEach没有直接可用的break,所以循环还是只好靠for。
我一直觉得简单的更好,所以更倾向for..in来遍历数组,但是webstorm中会warning。
如果不应该用for..in来遍历,请告诉我为什么。
代码举例:
vararray=[1,2,3,4,5];
for(vari=0;ivaritem=array[i];
console.log(item);
}
//或者
for(variinarray){
varitem=array[i];
console.log(item);
}
哔哔one
浏览 415回答 2
2回答

互换的青春

一个最简单常见的,为何不要用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库

MMMHUHU

针对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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript