網頁

JavaScript 流程控制 - 迴圈控制

for迴圈控制

適合重複動作已知次數。

組成:
  1. 初始化(initialization)
  2. 條件句(test condition)
  3. 動作(action)
  4. 更新(update)

// 執行順序為[1][2][3][4]-[2][3][4]-[2][3][4]-...
for ([1]initialization; [2]condition; [4]post loop expression)
  [3]statement

/*
for (1;2;4)
  3
  
或

for (初始化;條件句;更新)
  動作
*/ 

最佳化for迴圈控制

for (var i = 0; i < a.length; i++) {
 a[i]=i;
} 

這樣不是很有效率,因為每迴圈一次就會查詢一次 length 屬性。(但所有JavaScript的教科書都這樣教!)比較好的寫法:

for (var i = 0, len = a.length; i < len; i++) {
 a[i]=i;
} 

初始化時宣告兩個變數,把length屬性值存放到變數中。更棒的寫法:

for (var i = 0, item; item = a[i]; i++) {
 處理item
}

for 迴圈中間指定變數值的部分會被測試是否為「真的」(truthy):如果成功了,迴圈便會繼續。由於 i 每次都會加一,陣列內的每個項目會被照順序指定到變數 item。當偵測到「假的」(falsy) 項目時(如 undefined)迴圈便會停止。注意:這個小技巧只該用在你確定不會含有「假的」值的陣列(比如說一陣列的物件或 DOM 節點)。假如你在可能含有 0 的數字資料或可能含有空字串的字串資料上做迴圈,最好還是用 i, j 的方式。

while / do ~ while迴圈控制

while迴圈本身沒有更新條件程式,必須自建條件更新條件(update)。
while (condition)
  // 需含更新條件
  statement
組成:
  1. 檢測條件(test condition)
  2. 行動(action)

do
  statement
while (condition) 

先執行一次完整程式碼(statement),再進行檢測條件(condition)。

for ~ in迴圈控制

通常用來列舉物件的屬性。
for (property in expression)
  statement 

for / while 迴圈控制討論

while迴圈能做到任何for迴圈的任務,反之亦然。

for (init; test; update){
  action;
} 

init;
while (test) {
  action;
  update;
} 

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。