怎麽選擇使用 While Loop 還是 For Loop - paulip114/blog GitHub Wiki

while loop 跟 for loop` 都可以用來重複執行某段程式碼,但它們的使用場景和寫法其實有一些明確的差別與慣例,選對更容易讓你的程式碼清楚又好維護。


1. 快速對比:for vs while

特點 for loop while loop
適合什麼? 次數明確、有「起始值 → 結束值」的情況 條件驅動、不確定重複幾次
語法上有什麼特點? 初始化、條件、更新 都在一行寫完 只有條件在 while
是否常用 break/continue 通常較少 較常見,用來控制流程
看起來像什麼? 像是「數數」、「跑 i = 0 到 100」 像是「一直做,直到某件事發生」

2. 使用 for loop 的情境

🔁 明確知道要跑幾次

// 跑 10 次
for (let i = 0; i < 10; i++) {
  console.log(i);
}

📋 對陣列或字串做固定次數操作

const nums = [1, 2, 3];
for (let i = 0; i < nums.length; i++) {
  console.log(nums[i]);
}

✅ 小技巧:也可以用 for...of / for...in 更語意化

  • 針對 array 做 iterate 就用 for...of
  • 針對 object 做 iterate 就用 for...in
for (const num of nums) {
  console.log(num);
}

for (const item in obj) {
  console.log(item);
}
  • 如果同時取得索引 index 和值 value,可以使用 Array.prototype.entries() 方法
for (const [index, value] of nums.entries()) {
  console.log(index, value);
}

3. 使用 while loop 的情境

🌀 不確定要跑幾次,要等某個條件「變成 false」

let connected = true;
while (connected) {
  // 嘗試接收資料,直到斷線
  connected = checkConnection();
}

⏳ 等使用者輸入正確

let input;
while (input !== "yes") {
  input = prompt("Say yes to continue:");
}

🎲 模擬事件(如骰子、遊戲迴圈)

let roll;
while (roll !== 6) {
  roll = Math.ceil(Math.random() * 6);
  console.log("Rolled:", roll);
}

4. 什麼時候選錯會出問題?

  • while 寫明確次數 → 更容易忘記更新條件導致無限迴圈

    let i = 0;
    while (i < 10) {
      console.log(i);
      // 忘記 i++ 會卡住!
    }
    
  • for 做條件控制 → 會讓讀者搞不清「為什麼用 for?」

    for (; connected;) {
      // 🤔 這樣寫太繞,其實該用 while
    }
    

5. 簡單判斷法(實用!)

問題 用法
知道要執行幾次嗎? ✅ 用 for
我只是要「重複直到某件事發生」嗎? ✅ 用 while
是「遍歷陣列 / 資料結構」嗎? ✅ 用 forfor...of
是「模擬事件 / 監聽狀態 / 等待反應」嗎? ✅ 用 while
需要進階控制流程(break / continue)嗎? 多半都可以,但 while 比較常用

6. 延伸:do...while 也可以用

如果你要「至少執行一次」然後再檢查條件,可以用這個:

let input: string;
do {
  input = prompt("Enter your name:");
} while (!input);

7. 總結一句話:

🪜 for 處理“我知道要跑幾次”的情況,用 while 處理“我不知道跑幾次”的情況