คำสั่ง continue ใช้เพื่อ ข้ามโค้ดที่เหลือในรอบลูปปัจจุบัน ไปเริ่มรอบถัดไปทันที ต่างจาก break ที่ออกจากลูปสิ้นสุด
การทำงาน
- เจอ
continueในบล็อกลูป - ข้ามคำสั่งที่เหลือในรอบนี้
- กระโดดไป Condition Check ของลูปทันที
- ถ้าเงื่อนไขยัง true → รันรอบใหม่ | false → ออกจากลูป
ตัวอย่างโค้ด
<html>
<body>
<script>
var x = 1;
document.write("Entering the loop <br />");
while (x < 10) {
x = x + 1;
if (x == 5) {
continue; // ข้ามการพิมพ์ 5
}
document.write(x + "<br />");
}
document.write("Exiting the loop!<br />");
</script>
</body>
</html>
ผลลัพธ์
Entering the loop 2 3 4 6 7 8 9 10 Exiting the loop!
สังเกต: เลข 5 หายไป (ถูก continue ข้าม) แต่ลูปทำงานต่อจนครบ 10
continue ใน for Loop
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue; // ข้ามเลขคู่
console.log(i); // 1, 3, 5, 7, 9
}
// ตัวแปร i ยังเพิ่มขึ้นปกติ (Iteration Statement ยังทำงาน)
for (let i = 0; i < 5; i++) {
if (i === 2) continue;
console.log(i); // 0, 1, 3, 4
// i++ ยังทำงานหลัง continue
}
continue ใน Nested Loops
continue ทำงานกับลูปชั้นในสุด (Innermost) เท่านั้น ใช้ Label เพื่อควบคุมลูปชั้นนอก:
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 1) continue outer; // ข้ามรอบ outer ที่เหลือ ไปรอบ i ถัดไป
console.log(i, j);
}
}
// ผลลัพธ์: (0,0), (1,0), (2,0)
break vs continue สรุป
| คำสั่ง | คำอธิบาย | ใช้เมื่อไหร่ |
|---|---|---|
break | ออกจากลูปสิ้นสุด | พบสิ่งที่ต้องการ / Error / หยุดประมวลผล |
continue | ข้ามรอบนี้ ไปรอบถัดไป | กรองข้อมูล / Skip Invalid / Filter |
แนวทางปฏิบัติที่ดี
- ใช้
continueต้นบล็อก (Guard Clause) เพื่อลด Nesting - หลีกเลี่ยง
continueในลูปซ้อนลึก (ใช้ Label หรือ Refactor) - พิจารณา
filter()/forEach()แทนลูปพร้อม continue
ตัวอย่าง Guard Clause Pattern
// ❌ ซ้อนลึก
for (const user of users) {
if (user.active) {
if (user.hasPermission) {
if (user.verified) {
process(user);
}
}
}
}
// ✅ Guard Clause ด้วย continue
for (const user of users) {
if (!user.active) continue;
if (!user.hasPermission) continue;
if (!user.verified) continue;
process(user); // ระดับซ้ายสุด อ่านง่าย
}