跳至主要內容

基础循环

wzCoding大约 4 分钟JavaScript基础循环

基础循环

循环提供了一种快速和简单的方式去做一些重复的事,在 JavaScript 中有多种循环语句,可以用来重复执行一段代码,包括:

  • for 循环:在给定条件为真的情况下重复执行一段代码
  • for...in 循环:用于遍历对象的可枚举属性
  • for...of 循环:用于遍历可迭代对象(如数组、字符串、Map 和 Set)
  • while 循环:在给定条件为真的情况下重复执行一段代码
  • do...while 循环:在给定条件为真的情况下重复执行一段代码,至少执行一次
  • break 语句:终止循环,switch,或者是链接到 label 语句
  • continue 语句:跳过当前循环进入下一个循环
  • label 语句:标记一个循环,然后可以在其他位置引用

for 循环

for 循环可以在给定条件为真的情况下重复执行一段代码,直到指定的循环条件为 false(也可以通过使用 break 来终止循环),for 循环的用法是:

for ([initialization]; [condition]; [final-expression]) {
   // do something
}

其中,initialization 是一个可选参数,用于在循环开始前初始化变量。condition 是一个可选参数,用于判断循环是否应该继续执行。如果 condition 为 true,则执行循环体中的代码;否则退出循环。final-expression 是一个可选参数,用于在每次循环迭代完成后更新变量

例如使用 for 循环遍历数组:

let arr = [1, 2, 3]
for (let i = 0; i < arr.length; i++) {
    console.log(arr[i])
}
// 1
// 2
// 3

for...in 循环

for...in 循环用于遍历对象,通过一个指定的变量来循环一个对象所有可枚举的属性,它的用法是:

for (variable in object) {
    // do something
}

其中,variable 是一个变量,用于存储对象的每个属性名。object 是一个对象,表示要遍历的对象

例如,下面是一个使用 for...in 循环遍历对象属性的例子

let obj = {a: 1, b: 2, c: 3}
for (let prop in obj) {
    console.log(prop + ': ' + obj[prop])
}
//  a:1
//  b:2
//  c:3

for...of 循环

for...of 循环用于遍历可迭代对象(如数组、字符串、Map 和 Set),对值的每一个独特属性调用一次迭代,它的用法是:

for (variable of iterable) {
    //  do something
}

其中,variable 是一个变量,用于存储可迭代对象的每个值。iterable 是一个可迭代对象,表示要遍历的对象

例如,下面是一个使用 for...of 循环遍历数组的例子:

let arr = [1, 2, 3];
for (let value of arr) {
    console.log(value);
}
// 1
// 2
// 3

while 循环

while 循环会在给定条件为真的情况下重复执行一段代码,它的用法是:

while (condition) {
    // do something
}

其中,condition 是一个表达式,用于判断循环是否应该继续执行。如果 condition 为 true,则执行循环体中的代码;否则退出循环

例如,下面是一个使用 while 循环计算阶乘的例子:

let n = 5;
let factorial = 1;

while (n > 1) {
    factorial *= n;
    n--;
}
console.log(factorial); // 120

do...while 循环

do...while 循环会在给定条件为真的情况下重复执行一段代码,直到指定的条件求值得到假值(false),至少执行一次,它的用法是:

do {
    // do something
} while (condition);

其中,condition 是一个表达式,用于判断循环是否应该继续执行。如果 condition 为 true,则执行循环体中的代码;否则退出循环

例如,下面是一个使用 do...while 循环计算阶乘的例子:

let n = 5;
let factorial = 1;

do {
    factorial *= n;
    n--;
} while (n > 1);
console.log(factorial); // 120

label 语句

label 作为标记语句可以用来标记一个 for 循环,通常与 breakcontinue 语句一起使用。label 语句的语法为:

label:
   // for 循环

其中,label 是一个标识符,用于标识 for 循环

例如,下面是一个使用 label 语句和 break 语句跳出多层循环的例子:

outer: 
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        if (i == 1 && j == 1) {
            break outer;
        }
        console.log(i, j);
    }
}
//  0 0
//  0 1
//  0 2
//  1 0

break 语句

break 语句来终止循环或是 switch 语句,它的用法是:

  • 当直接使用 break 时,会立即终止当前循环或 switch
    for (let i = 0; i < 10; i++) {
      if (i === 5) {
          break;
      }
      console.log(i);
    }
    //  0
    //  1
    //  2
    //  3
    //  4
    
    while (true) {
      if (Math.random() > 0.95) {
          break;
      }
      console.log(Math.random());
    }
    
  • 当使用带有 labelbreak 时,会终止带 label 标记的循环
    let sum = 0;
    outer:
    for (let i = 0; i < 5; i++) {
      for (let j = 0; j < 10; j++) {
          if (i == 4 && j == 8) {
              break outer;
          }
          sum ++
      }
    }
    console.log(sum) //48
    

continue 语句

continue 语句可以跳过当前的循环,继续执行下一个循环,可以在 forwhiledo...while 循环中使用,它的用法是:

  • 当直接使用 continue 时,会立即终止当前循环,进入下一次循环
    for (let i = 0; i < 10; i++) {
      if (i % 2 === 0) {
          continue;
      }
      console.log(i);
    }
    //  1
    //  3
    //  5
    //  7
    //  9
    
  • 当使用带有 labelcontinue 时,会终止带 label 标记的循环
    let sum = 0;
    outer:
    for (let i = 0; i < 10; i++) {
      for (let j = 0; j < 10; j++) {
          if (i % 2 == 0) {
              continue outer;
          }
          sum += i*j
      }
    }
    console.log(sum)  //  1125