Khóa học IT JavaScript Cơ bản 042_Vòng lặp while, for
Câu lệnh vòng lặp là phương pháp để thực thi lặp lại một khối mã. JavaScript cung cấp các loại câu lệnh vòng lặp khác nhau như while, do-while, for. Một thân vòng lặp hoàn chỉnh bao gồm: biểu thức khởi tạo, điều kiện vòng lặp và bộ lặp.
Vòng lặp while
Vòng lặp while được sử dụng để thực thi lặp lại một đoạn mã khi điều kiện là true. Một lần thực thi thân vòng lặp được gọi là một lần lặp. Bất kỳ biểu thức hoặc biến nào cũng có thể là điều kiện vòng lặp. Điều kiện vòng lặp được đánh giá và kết quả được chuyển đổi thành giá trị boolean. Tương tự như if, nếu thân vòng lặp chỉ có một câu lệnh, bạn có thể bỏ qua dấu ngoặc nhọn {…}, nhưng điều này không được khuyến nghị. Điều kiện được kiểm tra trước mỗi lần lặp.
Ví dụ:
let i = 0; // Biểu thức khởi tạo, thường dùng để khai báo biến đếm, thiếu sẽ báo lỗi undefinedwhile (i < 5) { // Điều kiện vòng lặp, khi `true`, vòng lặp sẽ tiếp tục thực thi console.log(i); i++; // Bộ lặp, thường dùng để cập nhật biến đếm, khớp với điều kiện vòng lặp}Ví dụ vòng lặp vô hạn:
let i = 0; while (1) { // Điều kiện luôn true sẽ vào vòng lặp vô hạn console.log(i); i++; // Thường dùng dạng bộ đếm này để cập nhật điều kiện vòng lặp if (i >= 5) break; // Bỏ comment để vào chế độ vòng lặp vô hạn}Vòng lặp do-while
Vòng lặp do-while tương tự như vòng lặp while, nhưng nó thực thi thân vòng lặp một lần trước, sau đó kiểm tra xem điều kiện có phải true không. Nếu điều kiện đúng, tiếp tục thực thi thân vòng lặp. Cần chú ý trường hợp sử dụng - chỉ sử dụng do-while khi thân vòng lặp cần được thực thi ít nhất một lần bất kể điều kiện có đúng hay không. Cho các trường hợp khác, vòng lặp while được khuyến nghị. Điều kiện được kiểm tra sau mỗi lần lặp.
Ví dụ:
let i = 0;do { console.log(i); i++;} while (i < 5);Vòng lặp for
Vòng lặp for là cấu trúc vòng lặp phức tạp hơn nhưng được sử dụng phổ biến nhất để thực thi lặp lại một đoạn mã. Vòng lặp for chứa ba phần: biểu thức khởi tạo, điều kiện vòng lặp và bộ lặp. Sau đây là cú pháp cơ bản của vòng lặp for: Điều kiện được kiểm tra trước mỗi lần lặp, có thể sử dụng các thiết lập khác.
Ví dụ:
for (let i = 0; i < 5; i++) { console.log(i);}Ví dụ vòng lặp vô hạn:
let i = 0; for ( ; ; ) { // Bỏ qua tất cả điều kiện sẽ vào vòng lặp vô hạn console.log(i); i++; // Thường dùng dạng bộ đếm này để cập nhật điều kiện vòng lặp if (i >= 5) break; // Bỏ comment để vào chế độ vòng lặp vô hạn}Bỏ qua các đoạn câu lệnh
Vòng lặp for có thể bỏ qua bất kỳ một hoặc nhiều phần nào trong biểu thức khởi tạo, điều kiện vòng lặp hoặc bộ lặp, nhưng dấu chấm phẩy ; phải được giữ lại. Dấu chấm phẩy được sử dụng để phân tách từng phần, và khi bỏ qua một phần, dấu chấm phẩy tương ứng vẫn cần được giữ lại.
Ví dụ:
let x = 0;for (; x < 5; x++) { console.log(x);}// Bỏ qua biểu thức khởi tạo, di chuyển ra ngoài vòng lặp, vòng lặp vẫn hợp lệ
let y = 0;for (;; y++) { if (y >= 5) { break; } console.log(y);}// Bỏ qua điều kiện vòng lặp, sử dụng câu lệnh `if` và `break` để kết thúc vòng lặp
let z = 0;for (; z < 5;) { console.log(z); z++;}// Bỏ qua bộ lặp, bộ lặp được di chuyển vào trong thân vòng lặp, vòng lặp vẫn hợp lệVòng lặp lồng nhau
Vòng lặp lồng nhau đề cập đến việc chứa một cấu trúc vòng lặp hoàn chỉnh khác bên trong thân vòng lặp. Vòng lặp lồng nhau thực thi vòng lặp bên trong một lần mỗi khi vòng lặp bên ngoài được thực thi.
Ví dụ tam giác thuận:
// Ví dụ Afor (let i = 1; i <= 5; i++) { // Vòng lặp bên ngoài, kiểm soát số hàng, từ 1 đến 5. let row = ''; // Mỗi khi vòng lặp bên ngoài thực thi, tạo chuỗi rỗng `row` để lưu trữ sao cho hàng hiện tại. for (let j = 1; j <= i; j++) { // Vòng lặp bên trong, kiểm soát số sao mỗi hàng, từ 1 đến số hàng hiện tại `i`. row += '⭐ '; // Thêm sao vào `row`, tạo thành chuỗi sao cho hàng hiện tại. } console.log(row); // Xuất chuỗi sao cho hàng hiện tại.}// Ví dụ Bfor (let i = 1; i <= 5; i++) { // Vòng lặp ngoài biểu thị số hàng for (let j = 1; j <= i; j++) { // Vòng lặp trong biểu thị cột document.write('⭐'); // Sử dụng sao làm phần tử đồ họa } document.write('</br>'); // Xuống dòng}Ví dụ tam giác ngược:
// Ví dụ Afor (let i = 5; i >= 1; i--) { // Vòng lặp bên ngoài, kiểm soát số hàng, từ 1 đến 5. let row = ''; // Mỗi khi vòng lặp bên ngoài thực thi, tạo chuỗi rỗng `row` để lưu trữ sao cho hàng hiện tại. for (let j = 1; j <= i; j++) { // Vòng lặp bên trong, kiểm soát số sao mỗi hàng, từ 1 đến số hàng hiện tại `i`. row += '* '; // Thêm sao vào `row`, tạo thành chuỗi sao cho hàng hiện tại. } console.log(row); // Xuất chuỗi sao cho hàng hiện tại.}// Ví dụ Bfor (let i = 1; i <= 5; i++) { // Vòng lặp ngoài biểu thị số hàng for (let j = 0; j <= 5 - i; j++) { // Vòng lặp trong biểu thị cột document.write('⭐'); // Sử dụng sao làm phần tử đồ họa } document.write('</br>'); // Xuống dòng}break Kết thúc (Thoát) Vòng lặp
break được sử dụng để kết thúc (thoát) vòng lặp hoặc câu lệnh switch hiện tại. Nếu không có break, các câu lệnh case tiếp theo sẽ tiếp tục được thực thi (tức là hiện tượng “xuyên qua” xảy ra).
Sự kết hợp “vòng lặp vô hạn + break” phù hợp cho các tình huống mà bạn không cần kiểm tra điều kiện ở đầu/cuối vòng lặp, nhưng cần kiểm tra điều kiện ở nhiều vị trí ở giữa hoặc thậm chí trong thân vòng lặp.
Ví dụ:
let count = 0;while (true) { console.log("Đang lặp..."); // Mô phỏng một điều kiện, thoát vòng lặp khi thỏa mãn if (count === 5) { console.log("Điều kiện thỏa mãn, thoát vòng lặp"); break; } count++;}continue Tiếp tục lần lặp tiếp theo (Bỏ qua)
continue được sử dụng để kết thúc sớm lần lặp hiện tại trong vòng lặp và tiếp tục lần lặp tiếp theo. continue là “phiên bản nhẹ” của break. Nó không dừng toàn bộ vòng lặp, mà dừng lần lặp hiện tại và buộc bắt đầu một vòng lặp mới (nếu điều kiện cho phép).
Ví dụ:
for (let i = 0; i < 8; i++) { if (i % 2 === 0) { continue; // Bỏ qua lần lặp hiện tại khi i chia 2 dư 0, tiếp tục lần lặp tiếp theo } console.log(i);}