for循环的通常结构如下
for (表达式1; 表达式2; 表达式3) {
语句;
}
- 表达式1是可选的,若表达式1存在,则会执行表达式1。注意在整个循环过程中,表达式1只会执行一次,通常用于作循环变量的初始化
- 表达式2也是可选的,它用来作循环条件,当表达式2为真时,循环才会继续进行。若省略表达式2,则默认为真,注意
;
是不能省略的 - 表达式3也是可选的,通常用于作循环变量的迭代
for循环的执行流程通常如下所示
下面是一个for循环的例子
for (let i = 0; i < 10; i++) {
console.log(i);
}
这个例子在控制台打印数字0到9
do…while循环
do…while循环的结构如下
do {
语句;
} while (条件表达式);
它的执行流程如下
请注意,无论什么情况下,do…while循环都是至少会执行一次的
while循环
while (条件表达式) {
语句;
}
它的执行流程如下
# label语句
label:
语句;
label语句通常和break语句以及continue语句配合使用,详情请参考break语句和continue语句部分
break语句
break语句有两种形式
break; // 结束离break语句最近的一层循环
break label; // 结束被对应label标记的循环
下面是两个例子
for (let i = 0; i < 10; i++) {
if (i === 5) {
break;
}
console.log(i);
}
上面这个例子只会在控制台输出1到4,当i值为5的时候,循环终止
skip:
for (let i = 0; i < 10; i++) {
console.log(i);
for (let j = 0; j < 10; j++) {
if (j === 5) {
break skip;
}
}
}
上面这个例子只会输出0,因为当j等于5时,break语句会结束label为skip的for循环。
continue语句
continue语句作用与break语句类似,不同的是continue语句只会结束当前的这轮循环,下一轮循环会继续执行。它也有两种形式
continue;
continue label;
第一种形式,会立即结束离它最近的一轮循环,开始下一轮循环;第二种形式,会立即结束被标签名标记的循环,然后从这个循环开始执行下一轮循环
for (let i = 0; i < 3; i++) {
console.log("Hello");
if (i === 1) {
continue;
}
console.log(i);
}
执行结果如下
当i===1
时,因为执行了continue语句,所以在这轮循环中console.log(i)
并不会执行。因此这轮循环中,控制台只输出Hello
带有label的continue语句,这里就不做过多赘述。请注意,非极其特殊的情况,请不要使用label语句,它对程序的可阅读性有着很大的负面影响。你能想象你原本只需要从中国到南极,但中途又让你去北极然后再去南极的疲累吗?
for…in语句和for…of语句
for...in
语句的通常使用形式如下
for (variable in object)
statement
for...of
语句的通常使用形式如下
for (variable of object)
statement
请注意for...in
语句遍历的是对象的属性名,for...of
语句遍历的是对象的属性值
a = [1, 3, 5, 7, 8];
for (i in a) {
console.log(i); // 输出0 1 2 3 4
}
for (i of a) {
console.log(i); // 输出1 3 5 7 8
}