บันทึกเทคนิคของ zhaoJian

คอร์ส IT พื้นฐาน JavaScript 042_ลูป while、for

การเรียนรู้ / พื้นฐาน JavaScript ~5524 คำ · อ่าน 14 นาที - ครั้งที่อ่าน

คำสั่งลูปเป็นวิธีการที่ใช้ในการรันบลอกโค้ดซ้ำๆ JavaScript จัดเตรียมคำสั่งลูปประเภทต่างๆ เช่น while, do-while, for เป็นต้น ตัวลูปที่สมบูรณ์ประกอบด้วย: นิพจน์เริ่มต้น, เงื่อนไขลูป และตัววนซ้ำ

ลูป while

ลูป while ใช้สำหรับรันบลอกโค้ดซ้ำๆ เมื่อเงื่อนไขเป็น true การรันเดียวของตัวลูปเรียกว่า หนึ่งรอบการวนซ้ำ นิพจน์หรือตัวแปรใดๆ สามารถเป็นเงื่อนไขลูปได้ เงื่อนไขลูปจะถูกคำนวณและผลลัพธ์จะถูกแปลงเป็นค่าบูลีน เช่นเดียวกับ if หากตัวลูปมีเพียงคำสั่งเดียว คุณสามารถละเว้นวงเล็บปีกกา {…} ได้ แต่ไม่แนะนำให้ทำเช่นนั้น เงื่อนไขจะถูกตรวจสอบก่อนการวนซ้ำแต่ละครั้ง

ตัวอย่าง:

let i = 0; // นิพจน์เริ่มต้น, โดยทั่วไปใช้สำหรับประกาศตัวแปรตัวนับ, ถ้าไม่มีจะเกิดข้อผิดพลาด undefined
while (i < 5) { // เงื่อนไขลูป, ถ้าเป็น `true` ลูปจะทำงานต่อไป
console.log(i);
i++; // ตัววนซ้ำ, โดยทั่วไปใช้สำหรับอัปเดตตัวแปรตัวนับให้ตรงกับเงื่อนไขลูป
}

ตัวอย่างลูปไม่มีที่สิ้นสุด:

let i = 0;
while (1) { // เงื่อนไขเป็น true เสมอจะเข้าสู่ลูปไม่มีที่สิ้นสุด
console.log(i);
i++; // โดยทั่วไปใช้รูปแบบนี้ในการอัปเดตตัวนับสำหรับเงื่อนไขลูป
if (i >= 5) break; // หากคอมเมนต์บรรทัดนี้จะเข้าสู่โหมดลูปไม่มีที่สิ้นสุด
}

ลูป do-while

ลูป do-while คล้ายกับลูป while แต่จะรันตัวลูปหนึ่งครั้งก่อน จากนั้นจึงตรวจสอบว่าเงื่อนไขเป็น true หรือไม่ ถ้าเงื่อนไขเป็นจริงจะทำงานต่อไป ต้องใส่ใจกับสถานการณ์การใช้งาน ใช้ do-while เฉพาะเมื่อต้องการรันตัวลูป อย่างน้อยหนึ่งครั้ง ไม่ว่าเงื่อนไขจะเป็นจริงหรือไม่ สถานการณ์อื่นๆ แนะนำให้ใช้ลูป while เงื่อนไขจะถูกตรวจสอบหลังจากการวนซ้ำแต่ละครั้ง

ตัวอย่าง:

let i = 0;
do {
console.log(i);
i++;
} while (i < 5);

ลูป for

ลูป for เป็นโครงสร้างลูปที่ซับซ้อนกว่า แต่ก็เป็นที่ใช้กันมากที่สุด ใช้สำหรับรันบลอกโค้ดซ้ำๆ ลูป for ประกอบด้วยสามส่วน: นิพจน์เริ่มต้น, เงื่อนไขลูป และตัววนซ้ำ ต่อไปนี้เป็นไวยากรณ์พื้นฐานของลูป for: เงื่อนไขจะถูกตรวจสอบก่อนการวนซ้ำแต่ละครั้ง และสามารถใช้การตั้งค่าอื่นๆ ได้

ตัวอย่าง:

for (let i = 0; i < 5; i++) {
console.log(i);
}

ตัวอย่างลูปไม่มีที่สิ้นสุด:

let i = 0;
for ( ; ; ) { // การละเว้นเงื่อนไขทั้งหมดจะเข้าสู่ลูปไม่มีที่สิ้นสุด
console.log(i);
i++; // โดยทั่วไปใช้รูปแบบนี้ในการอัปเดตตัวนับสำหรับเงื่อนไขลูป
if (i >= 5) break; // หากคอมเมนต์บรรทัดนี้จะเข้าสู่โหมดลูปไม่มีที่สิ้นสุด
}
การละเว้นส่วนของคำสั่ง

ลูป for สามารถละเว้นนิพจน์เริ่มต้น, เงื่อนไขลูป หรือตัววนซ้ำได้ส่วนใดส่วนหนึ่งหรือหลายส่วน แต่เครื่องหมายอัฒภาค ; จะต้องถูกเก็บไว้ เครื่องหมายอัฒภาคใช้สำหรับแยกแต่ละส่วน เมื่อละเว้นหนึ่งส่วนยังคงต้องเก็บเครื่องหมายอัฒภาคที่สอดคล้องกัน

ตัวอย่าง:

let x = 0;
for (; x < 5; x++) {
console.log(x);
}
// ละเว้นนิพจน์เริ่มต้น, ย้ายไปยังภายนอกลูป, ลูปยังคงใช้งานได้
let y = 0;
for (;; y++) {
if (y >= 5) {
break;
}
console.log(y);
}
// ละเว้นเงื่อนไขลูป, ยุติลูปผ่านคำสั่ง `if` และ `break`
let z = 0;
for (; z < 5;) {
console.log(z);
z++;
}
// ละเว้นตัววนซ้ำ, ตัววนซ้ำถูกย้ายเข้าไปในตัวลูป, ลูปยังคงใช้งานได้

ลูปซ้อนกัน

ลูปซ้อนกันหมายถึงการมีโครงสร้างลูปที่สมบูรณ์อีกอันหนึ่งอยู่ภายในตัวลูป ลูปซ้อนกันจะรันลูปภายในหนึ่งครั้งทุกครั้งที่รันลูปภายนอก

ตัวอย่างสามเหลี่ยมปกติ:

// ตัวอย่าง A
for (let i = 1; i <= 5; i++) { // ลูปภายนอก, ควบคุมจำนวนแถว, จาก 1 ถึง 5
let row = ''; // ทุกครั้งที่รันลูปภายนอก, สร้างสตริงว่าง `row`, ใช้สำหรับเก็บดาวของแถวปัจจุบัน
for (let j = 1; j <= i; j++) { // ลูปภายใน, ควบคุมจำนวนดาวในแต่ละแถว, จาก 1 ถึงจำนวนแถวปัจจุบัน `i`
row += ''; // เพิ่มดาวลงใน `row`, สร้างสตริงดาวของแถวปัจจุบัน
}
console.log(row); // แสดงสตริงดาวของแถวปัจจุบัน
}
// ตัวอย่าง B
for (let i = 1; i <= 5; i++) { // ลูปภายนอกแทนจำนวนแถว
for (let j = 1; j <= i; j++) { // ลูปภายในแทนคอลัมน์
document.write(''); // ใช้ดาวเป็นองค์ประกอบกราฟิก
}
document.write('</br>'); // ขึ้นบรรทัดใหม่
}

ตัวอย่างสามเหลี่ยมกลับหัว:

// ตัวอย่าง A
for (let i = 5; i >= 1; i--) { // ลูปภายนอก, ควบคุมจำนวนแถว, จาก 1 ถึง 5
let row = ''; // ทุกครั้งที่รันลูปภายนอก, สร้างสตริงว่าง `row`, ใช้สำหรับเก็บดาวของแถวปัจจุบัน
for (let j = 1; j <= i; j++) { // ลูปภายใน, ควบคุมจำนวนดาวในแต่ละแถว, จาก 1 ถึงจำนวนแถวปัจจุบัน `i`
row += '* '; // เพิ่มดาวลงใน `row`, สร้างสตริงดาวของแถวปัจจุบัน
}
console.log(row); // แสดงสตริงดาวของแถวปัจจุบัน
}
// ตัวอย่าง B
for (let i = 1; i <= 5; i++) { // ลูปภายนอกแทนจำนวนแถว
for (let j = 0; j <= 5 - i; j++) { // ลูปภายในแทนคอลัมน์
document.write(''); // ใช้ดาวเป็นองค์ประกอบกราฟิก
}
document.write('</br>'); // ขึ้นบรรทัดใหม่
}

break ยุติ (จบ, ออกจาก) ลูป

break ใช้สำหรับยุติ (จบ, ออกจาก) ลูปปัจจุบันหรือคำสั่ง switch หากไม่มี break จะทำงาน case ต่อไป (เกิดปรากฏการณ์ “ทะลุผ่าน”)

การผสมผสาน “ลูปไม่มีที่สิ้นสุด + break” เหมาะสำหรับสถานการณ์ที่ไม่จำเป็นต้องตรวจสอบเงื่อนไขที่จุดเริ่มต้น/สิ้นสุดของลูป แต่ต้องตรวจสอบเงื่อนไขตรงกลางหรือแม้กระทั่งหลายตำแหน่งในตัว

ตัวอย่าง:

let count = 0;
while (true) {
console.log("อยู่ในลูป...");
// จำลองเงื่อนไข, เมื่อเงื่อนไขตรงตามจะออกจากลูป
if (count === 5) {
console.log("ตรงตามเงื่อนไข, ออกจากลูป");
break;
}
count++;
}

continue ดำเนินการต่อ (ข้าม) ลูปครั้งถัดไป

continue ใช้สำหรับยุติการวนซ้ำปัจจุบันก่อนกำหนดในลูป และดำเนินการวนซ้ำครั้งถัดไป continue เป็น “เวอร์ชันเบา” ของ break มันไม่หยุดลูปทั้งหมด แต่หยุดการวนซ้ำปัจจุบันและบังคับให้เริ่มการวนซ้ำใหม่ (หากเงื่อนไขอนุญาต)

ตัวอย่าง:

for (let i = 0; i < 8; i++) {
if (i % 2 === 0) {
continue; // เมื่อ i หารเหลือ 2 เป็น 0 จะข้ามการวนซ้ำปัจจุบันและดำเนินการวนซ้ำครั้งถัดไป
}
console.log(i);
}
แชร์:

ความคิดเห็น