亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

FFIVE 2019-04-09 20:24:59
由于forEach沒有直接可用的break,所以循環還是只好靠for。我一直覺得簡單的更好,所以更傾向for..in來遍歷數組,但是webstorm中會warning。如果不應該用for..in來遍歷,請告訴我為什么。代碼舉例:vararray=[1,2,3,4,5];for(vari=0;i
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

一個最簡單常見的,為何不要用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-09
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

針對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-09
  • 2 回答
  • 0 關注
  • 303 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號