基础循环
基础循环
循环提供了一种快速和简单的方式去做一些重复的事,在 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
循环,通常与 break
或 continue
语句一起使用。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()); }
- 当使用带有
label
的break
时,会终止带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
语句可以跳过当前的循环,继续执行下一个循环,可以在 for
、while
、do...while
循环中使用,它的用法是:
- 当直接使用
continue
时,会立即终止当前循环,进入下一次循环for (let i = 0; i < 10; i++) { if (i % 2 === 0) { continue; } console.log(i); } // 1 // 3 // 5 // 7 // 9
- 当使用带有
label
的continue
时,会终止带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