Vòng lặp trong JavaScript

Ngày đăng: 01/10/2020   -    Cập nhật: 02/10/2020


JavaScript hỗ trợ nhiều vòng lặp nhưng chủ yếu chia ra làm hai loại lặp với số lần đã biếtlặp với số lần chưa biết. Cùng mình tìm hiểu trong bài học hôm nay nhé.

Vòng lặp trong JavaScript

Vòng lặp trong JavaScript

1. Vòng lặp là gì?


Trong lập trình chúng ta thường sẽ làm một việc gì đó nhiều lần (lặp đi lặp lại), như nhập vào một danh sách sinh viên, hay đếm có bao nhiêu số chẵn trong khoảng từ 1 – 100.

Cũng có cách đó nhưng mà bạn có thể viết 100 hay một ngàn dòng if, hay switch – case.

Điều này cũng khả thi cho tới khi con số đó lên đến cả triệu thậm chí lớn hơn.

Công việc thì lặp đi lặp lại, nhưng ta không thể viết code cả trăm lần, triệu lần như thế được.

Như vậy rất mất công và code thì cứ phình to.

Chính vì thế, vòng lặp ra đời để giải quyết vấn đề này.

Vòng lặp thực hiện những công việc tương tự nhau với số lần biết trước hoặc số lần chưa biết trước.

Vòng lặp trong JavaScript thì chia ra làm hai loại:


  • Lặp với số lần biết trước ta sử dụng vòng lặp for hoặc vòng lặp for in.
  • Lặp với số lần chưa biết trước thì ta có vòng lặp while, do while.

2. Vòng lặp với số lần biết trước


Nếu bạn đã biết trước số lần lặp thì nên sử dụng vòng lặp for hoặc vòng lặp for in để tối ưu hóa chương trình.

2.1. Vòng lặp for trong JavaScript


Vòng lặp for là vòng lặp được sử dụng lặp lại một nhiệm vụ nhất định với số lần lặp cho trước.

Để hiểu cách hoạt động của vòng lặp for ta có sơ đồ sau:


Sơ đồ hoạt động của vòng lặp for trong JavaScript

Sơ đồ hoạt động của vòng lặp for trong JavaScript

Như bạn thấy, khi bắt đầu thì ta sẽ khởi tạo biến lặp cho biết số lần lặp chính xác luôn.

Cú pháp của vòng lặp for như sau:



for (khoiTaoBienLapbieuThucDieuKiencapNhatBienLap) {
    // Các câu lệnh thực thi này sẽ được lặp lại
}
 

Trong đó:

  • for: Là từ khóa
  • khoiTaoBienLap: Là khởi tạo một biến để đếm số lần lặp
  • bieuThucDieuKien: Là biểu thức kiểm tra số lần lặp (giới hạn)
  • capNhatBienLap: Là biểu thức cập nhật biến lặp để đếm số lần lặp

Ví dụ:


// Ví dụ vòng lặp for trong JS
for (let i = 0i < 10; ++i) {
    console.log("Học JS");
}
 

Khi chạy chương trình trên, trong màn hình console sẽ in ra 10 lần Học JS.

Ngoài ra, bạn cũng có thể cập nhật biến lặp ở trong thân của vòng lặp:



for (let i = 0i < 10;) {

    console.log("Học JS");
    // Cập nhật biến lặp
    ++i;
}
 

Và vì JavaScript rất linh hoạt nên nếu bạn quên từ khóa khai báo biến lặp như thế này:


for (i = 0i < 10; ++i) {
    console.log("Học JS");
}
 

Thì cũng không có vấn đề gì cả.

JS cũng hỗ trợ bạn khai báo biến lặp ngoài vòng lặp, như thế này:



// Khai báo biến lặp ngoài vòng lặp
let i = 0;

for (ii < 10; ++i) {
    console.log("Học JS");
}
 

> Tại sao lại có thể làm như thế thì bạn có thể đọc bài phạm vi biến trong JavaScript nhé.

Nhưng bạn cũng nên cẩn thận khi khai báo biến lặp bên ngoài vòng lặp.

Đôi khi có thể khiến bạn khó kiểm soát nếu trong quá trình maintain có thêm code, sửa, xóa code.

Và, nếu bạn khai báo biến lặp như thế này:



// Khai báo biến lặp mà không có từ khóa
// Hoặc sử dụng từ khóa var
for (i = 0i < 10; ++i) {
    console.log("Học JS");
}
// Truy cập biến i
console.log(i); // Kết quả: 10
 

Thì bên ngoài vòng lặp, ta có thể truy cập vào biến đếm, thậm chí thay đổi nó.

Do đó, nếu muốn vòng lặp hoạt động an toàn, không bị can thiệp từ bên ngoài vòng lặp, mình recomment bạn nên sử dụng từ khóa let để khai báo biến trong vòng lặp:



// Khai báo biến lặp với từ khóa let
for (let i = 0i < 10; ++i) {
    console.log("Học JS");
}
// Truy cập biến i
console.log(i); // Kết quả: error...
 

Bạn có thể sử dụng vòng lặp for để lặp qua mảng đơn.


// Mảng số
let array = [123456789];

// In ra giá trị các phần tử trong mảng
for (let i = 0i < array.lengthi++) {
    console.log(array[i]);
}
 

Thêm nữa, bạn cũng có thể sử dụng vòng lặp bên trong vòng lặp.

Ví dụ:



// Lặp từ 0 đến 9
for (i = 0i < 10i++) {
    // Lặp từ 0 đến 9
    for (j = 0j < 10j++) {
        console.log(i + " " + j);
    }
}
 

Kết quả bạn tự kiểm nghiệm trong trình soạn thảo của mình nhé.

2.2. Vòng lặp for in trong JavaScript


Vòng lặp for in trong JavaScript dùng để lặp qua các thuộc tính của một đối tượng. Khối lệnh bên trong vòng lặp sẽ được thực thi một lần cho mỗi thuộc tính.

Với vòng lặp for in này mình không khuyến khích các bạn sử dụng cho mảng.

Thường thì nó sẽ được sử dụng để debug bởi vì nó dễ dàng kiểm tra các thuộc tính của một đối tượng (object).

Cú pháp:



for (bienDaiDien in tenDoiTuong) {
    // Các câu lệnh thực thi
}
 

Trong đó:

  • for: Là từ khóa
  • bienDaiDien: Là khai báo một biến đại diện cho tên thuộc tính của đối tượng
  • tenDoiTuong: Là đối tượng cần được lặp qua

Ví dụ:

Đầu tiên, ta tạo một đối tượng:



// Tạo một đối tượng sinhVien
var sinhVien = {
    MSSV: "B1704863",
    hoVaTen: "Ngô Minh Trung",
    gioiTinh: "Nam",
};
 

Bây giờ, ta sử dụng vòng lặp for in để lặp qua đối tượng này:


// Lặp qua đối tượng
for (const x in sinhVien) {
    // In ra giá trị của các thuộc tính
    // có trong đối tượng
    console.log(sinhVien[x]);
}

// Kết quả như sau:
// B1704863
// Ngô Minh Trung
// Nam
 

Bạn cũng có thể in ra tên thuộc tính của đối tượng như sau:


// Lặp qua đối tượng
for (const x in sinhVien) {
    // In ra tên thuộc tính của đối tượng
    console.log(x);
}

// Kết quả như sau:
// MSSV
// hoVaTen
// gioiTinh
 

Ngoài ra, bạn cũng có thể thực hiện như thế này để in cặp key: value của đối tượng


// Lặp qua đối tượng
for (const x in sinhVien) {
    // In ra cặp key: value của đối tượng
    console.log(`${x}${sinhVien[x]}`);
}

// Kết quả như sau:
// MSSV: B1704863
// hoVaTen: Ngô Minh Trung
// gioiTinh: Nam
 

> Lưu ý: Mình sử dụng cặp dấu ` ` chứ không phải nháy đơn ' ' bạn nhé.

Sử dụng cặp dấu ` ` thì chương trình sẽ xét các giá trị bên trong ${ } như biến, tham chiếu... còn những thứ khác thì sẽ coi như là text.

3. Vòng lặp với số lần chưa biết trước

 

3.1. Vòng lặp while trong JS


Vòng lặp while thường được sử dụng để lặp đi lặp lại một khối lập mà không biết trước số lần lặp. Sơ đồ dưới đây mô tả hoạt động của vòng lặp while:

Sơ đồ hoạt động của vòng lặp while trong JavaScript

Sơ đồ hoạt động của vòng lặp while trong JavaScript

Như bạn thấy trong sơ đồ, khi bắt đầu chương trình, vòng lặp while sẽ kiểm tra điều kiện trước.

  • Nếu đúng thì thực thi khối lệnh.
  • Nếu sai thì thoát khỏi vòng lặp

Cú pháp:


while (bieuThucDieuKien) {
    // Các câu lệnh thực thi nếu điều kiện đúng
}
 

Trong đó:

  • while: Là từ khóa
  • bieuThucDieuKien: Là biểu thức kiểm tra điều kiện

Ví dụ: In ra 10 số chia hết cho 8 đầu tiên mà lớn hơn 10.

Đối với đề như này thì mình không thể sử dụng vòng lặp for vì mình không biết có thể sẽ cần lặp lại bao nhiêu lần để tìm ra 8 số đó.

Vì vậy chúng ta chỉ còn cách sử dụng câu lệnh lặp không biết số lần lặp.

Mình sẽ sử dụng vòng lặp while như sau:



let number = 10;
let count = 0;

while (count < 10) {
    if (number % 8 == 0) {
        // In ra số thỏa mãn
        console.log(number);
        ++count;
    }
    // Cập nhật số được lặp qua
    ++number;
}
 

Bởi vì số phải lớn hơn 10 nên khi khởi tạo biến lặp ta sẽ cho nó bằng 10 luôn.

  • Sau đó, trong chương trình sẽ kiểm tra xem có chia hết cho 8 không.
  • Nếu đúng thì in ra màn hình console, đồng thời cập nhật số lượng số tìm thấy.
  • Tiếp tục tăng biến đếm number lên 1 và tiếp tục kiểm tra...

Kết quả ta được:


16
24
32
40
48
56
64
72
80
88
 

Bây giờ chúng ta kiểm tra xem number đang giữ giá trị nào nhé:


console.log(number); // Kết quả: 89
 

Như vậy, biến number đã lặp từ 10 lên đến 89.

Một ví dụ đơn giản khác mà vòng lặp while có thể thay thế vòng lặp for:



let i = 0;
while (i < 10) {
    console.log("Học JS");
    ++i;
}
 

Kết quả sẽ cho ra tương tự như vòng lặp for.

3.2. Vòng lặp do while trong JS


Vòng lặp do while gần giống với vòng lặp while, đều là vòng lặp không biết trước số lần lặp.

Nhưng điểm khác nhau là vòng lặp này sẽ chạy ít nhất 1 lần lặp cho dù điều kiện đúng hay sai.

Bởi vì vòng lặp này kiểm tra điều kiện sau khi thực thi công việc.

Sơ đồ hoạt động:


Sơ đồ hoạt động của vòng lặp do while trong JavaScript

Sơ đồ hoạt động của vòng lặp do while trong JavaScript

Dưới đây là cú pháp của vòng lặp này:


do {
    // Các câu lệnh cần thực thi
while (bieuThucDieuKien);
 

Trong đó:

  • do ... while: là từ khóa
  • bieuThucDieuKien: Là biểu thức kiểm soát vòng lặp

Ví dụ:


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

Kết quả ta được:


i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
 

Bây giờ, thử thay đổi điều kiện là i > 5 xem thế nào nhé.


let i = 0;
do {
    console.log("i = " + i);
    ++i;
while (i > 5);
 

Kết quả:


i = 0
 

Như bạn thấy, mặc dù kiểm tra điều kiện sẽ thấy sai ngay, nhưng do chương trình thực thi câu lệnh trước khi kiểm tra điều kiện.

Do đó chúng ta vẫn có một lần thực thi như trên.


4. Câu lệnh break và continue trong vòng lặp


4.1. Câu lệnh break


Chắc bạn cũng quen với câu lệnh break khi sử dụng switch case ở câu lệnh rẽ nhanh trong JavaScript rồi.

Trong vòng lặp nó cũng có tác dụng tương tự đó là thoát khỏi vòng lặp luôn mà không lặp lại nữa, hay kiểm tra điều kiện gì nữa.

Khi thực hiện câu lệnh này vòng lặp sẽ lập tức dừng lại.

Ví dụ: In ra số nhỏ hơn 10, nếu gặp 5 thì thoát khỏi vòng lặp:



for (let i = 0i < 10; ++i) {
    // Nếu i bằng 5 thì thoát khỏi vòng lặp
    if (i == 5) {
        break// Lệnhh break để thóat vòng lặp
    }
    console.log(i);
}
 

Kết quả ta được:


0
1
2
3
4
 

4.2. Câu lệnh continue


Câu lệnh continue được sử dụng để bỏ qua một lần lặp.

Hãy thử làm qua ví dụ để hiểu nó.

Ví dụ: In ra màn hình console các số nhỏ hơn 10. Nhưng số 7 là số xấu, không in.



for (let i = 0i <= 10; ++i) {
    // Nếu i bằng 7 thì bỏ qua
    if (i == 7) {
        continue// Bỏ qua lần lặp này
    }
    console.log(i);
}
 

Kết quả ta được:


0
1
2
3
4
5
6
8
9
10
 

Như bạn thấy ở trong kết quả trên, chương trình không in ra số 7 bởi vì chúng ta đã sử dụng continue để bỏ qua lần lặp đó.

5. Vòng lặp for of trong JavaScript


Vòng lặp for ... in rất hữu ích để lặp qua các thuộc tính của đối tượng, nhưng để lặp qua các đối tượng có thể lặp lại như mảng và chuỗi, chúng ta có thể sử dụng for ... of.

Vòng lặp for ... of là một tính năng mới hơn của ECMAScript 6.

> ECMAScript (hoặc ES) là một đặc tả ngôn ngữ kịch bản được tạo ra để chuẩn hóa JavaScript.



Vòng lặp for .. of cho phép bạn lặp qua các cấu trúc dữ liệu có thể lặp lại như Array, String, Map, NodeLists, v.v.

Cú pháp của vòng lặp for .. of trong JavaScript:



for (bienDaiDien of doiTuongCoTheLap) {
    // Các câu lệnh thực thi
}
 

Trong đó:

  • bienDaiDien: Là biến đại diện cho các phần tử trong đối tượng có thể lặp
  • doiTuonCoTheLap: Là tên đối tượng có thể lặp

Ví dụ: Lặp qua mảng


// Tạo ra một mảng
let ngonNgu = ["JS""Java""PHP""Python"];

// Sử dụng for of để lặp qua mảng
for (let x of ngonNgu) {
    console.log(x);
}
 

Kết quả:


JS
Java
PHP
Python
 

Ví dụ: Lặp qua chuỗi


// Tạo ra một chuỗi
let chuoi = "NIIT";

// Lặp qua chuỗi
for (let x of chuoi) {
 console.log(x);
}
 

Kết quả ta được:


N
I
I
T
 

> Tìm hiểu kỹ hơn về for .. of trên Mozilla.

6. Vòng lặp vô hạn


Đây là vấn đề khá nan giải khi lập trình. Bạn có thể bị vòng lặp vô hạn bất cứ khi nào nếu code không chuẩn, hay không đúng logic.

Điều này dễ dẫn tới treo máy hoặc tốn quá nhiều tài nguyên cho nó.

Một vòng lặp vô hạn là khi điều kiện không bao giờ sai.

Ví dụ như thế này:



for (let i = 0i < 10;) {
    console.log("Vòng lặp này sẽ chạy mãi mãi");
}
 

Ở vòng lặp này, chúng ta đã bỏ quên việc tăng biến đếm.

Dẫn tới i luôn bằng 0 và luôn nhỏ hơn 10.

Vậy nên câu lệnh console.log(i); sẽ được hiện vĩnh viễn.

Đối với vòng lặp for nếu bạn để ba biểu thức điều kiện trong vòng lặp for trống thì bạn cũng tạo một vòng lặp vô hạn.



for ( ; ; ) {
    console.log("Vòng lặp này sẽ chạy mãi mãi");
}
 

Đối với vòng lặp while cũng tương tự, nếu bạn bỏ quên điều kiện thì vòng lặp sẽ lặp lại mã mãi.


let i = 0
while (i < 10) {
    console.log("Vòng lặp này sẽ chạy mãi mãi");
    // Bỏ quên điều kiện
    // ++i;
}
 

Hoặc đây là vòng lặp vô hạn với điều kiện luôn đúng:


// Ví dụ vòng lặp vô hạn
while (true) {
    console.log("Vòng lặp này sẽ chạy mãi mãi");
}
 

Ở trên là một số ví dụ về vòng lặp vô hạn, còn rất nhiều nguyên nhân dẫn đến vòng lặp chãy mãi không ngừng.

Khi lập trình thực tế thì sẽ có nhiều trường hợp mà bạn không thể nào ngờ đến, vì thế hãy chú ý nhé.


Tổng kết


Như vậy mình vừa giới thiệu các bạn về vòng lặp trong JavaScript, một số điểm chú ý để sử dụng vòng lặp cho đúng nhé.

Trước khi sử dụng vòng lặp nên phân tích bài toán, liệu bạn có biết được trước số lần lặp hay không? để biết sử dụng loại vòng lặp phù hợp.

Nếu không biết bao nhiêu lần lặp thì xác định điều kiện lặp để mình sử dụng vòng lặp không xác định số lần lặp, và ngược lại.

Hãy làm lại các ví dụ ở trên để hiểu hơn về các loại vòng lặp trong JavaScript.

> Vòng lặp được ứng dụng rất nhiều trong lập trình, đặc biệt, khi học về THUẬT TOÁN bạn sẽ thấy cách áp dụng chúng cực kỳ thú vị.


Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!