Syntax

Vòng lặp for, whiledo while trong JS tương tự C++.

Ngoài ra JS còn có vòng lặp for infor of:

  • for in lặp qua các key của đối tượng có thể lặp (object, array).
  • for of lặp qua các value của đối tượng có thể lặp.

Ví dụ 1:

const fruits = ["apple", "orange", "lemon"]
 
for (let index in fruits) {
  console.log(index)
} // 0, 1, 2
 
for (let fruit of fruits) {
  console.log(fruit)
} // "apple", "orange", "lemon"

Note

Lý do mà ta có thể dùng vòng lặp for in cho mảng là vì bản chất của một array là một object với các key là các index.

Ví dụ 2:

const champions = {
  Annie: {
    role: "mage",
    lane: "middle",
  },
  Ahse: {
    role: "archer",
    lane: "bottom",
  },
  Aatrox: {
    role: "fighter",
    lane: "top",
  },
}
 
for (let champion in champions) {
  console.log(champion)
} // Annie, Ashe, Aatrox
 
for (let champion of champions) {
  console.log(champion)
} // TypeError: champions is not iterable

Problem With the Console

Cho vòng lặp sau:

for (let i = 1; i <= 7; i++) {
  for (let j = 1; j <= i; j++) {
    console.log("#")
  }
}

Kết quả:

Nhận thấy rằng, các dấu # liên tục được gom lại thành một dấu duy nhất xuất hiện 28 lần (số 28 phía trước).

Ta có thể sử dụng chuỗi để giải quyết vấn đề này như sau:

let str = ""
 
for (let i = 1; i <= 7; i++) {
  for (let j = 1; j <= i; j++) str += "#"
  str += "\n"
}
 
console.log(str)

Labels for break/continue

Trong đoạn code dưới đây, nếu ta dùng từ khóa break ở vòng lặp bên trong thì vòng lặp bên ngoài vẫn sẽ tiếp tục chạy.

for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    let input = prompt(`Value at coords (${i},${j})`, "")
 
    // if an empty string or canceled, then break out
    if (!input) break
  }
}
 
alert("Done!")

Để break vòng lặp bên ngoài, ta cần dùng label để đặt tên cho nó. Cú pháp:

labelName: for (...) {
  ...
}

Ta break khỏi một vòng lặp nào đó bằng cách dùng từ khóa break kết hợp với tên vòng lặp:

outer: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    let input = prompt(`Value at coords (${i},${j})`, "")
 
    // If an empty string or canceled, then break out of both loops
    if (!input) break outer // (*)
 
    // Do something with the value...
  }
}
 
alert("Done!")

Trong đoạn code trên, chương trình sẽ nhảy từ chỗ (*) đến câu lệnh alert.

Chúng ta cũng có thể sử dụng từ khóa continue với label. Khi đó, chương trình sẽ chạy lần lặp tiếp theo của vòng lặp được gán nhãn.

Note

Các label không cho phép “jump” đến bất kỳ nơi nào trong code và chỉ có thể thực hiện break label trong một khối lệnh. sort file.ctime asc

Resources