คำสั่ง break ใช้เพื่อ ออกจากลูปทันที และทำคำสั่งถัดไปหลังลูปต่อไป
ตัวอย่างโค้ด
<!DOCTYPE html>
<html>
<body>
<p id="test"></p>
<script>
var text = "";
var i;
for (i = 0; i < 5; i++) {
if (i === 2) {
break; // ออกจากลูปเมื่อ i = 2
}
text += "Value: " + i + "<br>";
}
document.getElementById("test").innerHTML = text;
</script>
</body>
</html>
ผลลัพธ์
Value: 0 Value: 1
ลูปหยุดที่ i=2 (ไม่รัน i=2,3,4) เพราะ break ทำงานเมื่อ i===2
การทำงานใน Loop ต่างๆ
| Loop Type | Break Behavior |
|---|---|
for | ออกจากลูปทันที Iteration Statement ไม่ทำงาน |
while | ออกจากลูปทันที Condition ไม่ถูกตรวจสอบอีก |
do...while | ออกจากลูปทันที Condition ไม่ถูกตรวจสอบ |
for...of | ออกจากลูปทันที |
for...in | ออกจากลูปทันที |
forEach | ไม่สามารถใช้ break ได้ (ต้อง throw หรือใช้ for...of) |
Break ใน Switch Statement
ใน switch ใช้ break เพื่อป้องกัน Fall-through:
switch (grade) {
case 'A':
console.log('Excellent');
break; // หยุดที่นี่ ไม่ไป case B
case 'B':
console.log('Good');
break;
default:
console.log('Unknown');
}
Break กับ Nested Loops
break ปกติออกจากลูปชั้นในสุดเท่านั้น ใช้ Label เพื่อออกจากลูปชั้นนอก:
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break outer; // ออกจากทั้งสองลูป
console.log(i, j);
}
}
// ผลลัพธ์: (0,0) (0,1) (0,2) (1,0) → หยุดที่ (1,1)
ข้อควรระวัง
- โค้ดหลัง
breakในบล็อกเดียวกันจะเป็น Unreachable - ใน
forEach,map,filterไม่มี break → ใช้for...ofแทน - ใช้ Label อย่างระมัดระวัง (ดูบทความ Label Statement)
ตัวเลือกที่ดีกว่า (Functional Style)
// แทน for + break
const found = items.find(item => item.id === targetId);
// แทน while + break
const index = items.findIndex(item => condition(item));
if (index !== -1) { /* found */ }