怎麽選擇使用 While Loop 還是 For Loop - paulip114/blog GitHub Wiki
while loop 跟 for loop` 都可以用來重複執行某段程式碼,但它們的使用場景和寫法其實有一些明確的差別與慣例,選對更容易讓你的程式碼清楚又好維護。
1. 快速對比:for vs while
| 特點 | forloop | whileloop | 
|---|---|---|
| 適合什麼? | 次數明確、有「起始值 → 結束值」的情況 | 條件驅動、不確定重複幾次 | 
| 語法上有什麼特點? | 初始化、條件、更新 都在一行寫完 | 只有條件在 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 | 
| 是「遍歷陣列 / 資料結構」嗎? | ✅ 用 for或for...of | 
| 是「模擬事件 / 監聽狀態 / 等待反應」嗎? | ✅ 用 while | 
| 需要進階控制流程( break/continue)嗎? | 多半都可以,但 while 比較常用 | 
6. 延伸:do...while 也可以用
如果你要「至少執行一次」然後再檢查條件,可以用這個:
let input: string;
do {
  input = prompt("Enter your name:");
} while (!input);
7. 總結一句話:
🪜 用 for 處理“我知道要跑幾次”的情況,用 while 處理“我不知道跑幾次”的情況。