記錄一下js中各類for循環的寫法,發現仍是蠻有意思的。好了,話很少說,切入正題。
數組
js中for循環的結構以下所示:緩存
for (語句1; 語句2; 語句3) {
// do something
}
複製代碼
嗯,很完整的一個for循環,老鐵沒毛病。可是仍是記一下這裏的語句到底什麼意思吧:bash
下面寫個循環一個數組的例子性能
var arr = [0,1,2,3,4,5,6,7,8,9];
for (var i = 0; i< arr.length; i++) {
console.log(arr[i]);
}
複製代碼
若是已經定義好初始變量,語句1其實能夠省略spa
var arr = [0,1,2,3,4,5,6,7,8,9],
i = 0;
for (; i< arr.length; i++) {
console.log(arr[i]);
}複製代碼
在語句1中也能夠緩存數組長度,這樣會略微提高一下性能,若是數組很大,性能會提高較多code
var arr = [0,1,2,3,4,5,6,7,8,9];
for (var i = 0, l = arr.length; i< l; i++) {
console.log(arr[i]);
}複製代碼
若是循環的順序不重要,那麼能夠倒敘循環cdn
var arr = [0,1,2,3,4,5,6,7,8,9];
for (var i = arr.length; i > -1; i--) {
console.log(arr[i]);
}
複製代碼
可是貌似不太優雅(都特麼扯到-1去了,尷尬症有些要犯了。咋辦?有病得治啊!),下面:blog
var arr = [0,1,2,3,4,5,6,7,8,9];
for (var i = arr.length; i--;) {
console.log(arr[i]);
}
複製代碼
上面這句舒服多了。可是若是我就要是要正常的順序循環、又要提高性能減小變量呢?ip
var arr = [1,2,3,4,5,6,7,8,9];
for (var i = 0, item; item = arr[i++];) {
console.log(item);
}
複製代碼
爲何這裏item能夠做爲判斷條件呢?是由於item在取值時若是超過了arr的長度的時候,天然就取到的是個undefind,因此返回false;使用這種循環寫法時要注意以下幾點:資源
固然,循環數組還有forEach/some/every/map等等,由於不是for了,這裏暫時不作說明,須要的小夥伴能夠自行查閱相關方法。
最後列兩種死循環:
for(;;) {
// DO SOMETHING
};
for(;1;) {
// DO SOMETHING
};
複製代碼