# 循环与迭代
updated at 2020-11-25
# for循环
for ([initialExpression]; [condition]; [incrementExpression])
statement
1
2
2
for循环的过程
- 如果有初始化表达式
initialExpression,它将被执行。这个表达式通常会初始化一个或多个循环计数器,但语法上是允许一个任意复杂度的表达式的。这个表达式也可以声明变量。- 计算
condition表达式的值。如果condition的值是 true,循环中的语句会被执行。如果 condition 的值是 false,for 循环终止。如果condition表达式整个都被省略掉了,condition的值会被认为是true。- 循环中的
statement被执行。如果需要执行多条语句,可以使用块({ ... })来包裹这些语句。 如果有更新表达式incrementExpression,执行更新表达式。- 回到步骤 2。
const str = 'hello'
for (var i = str.length; i--;) {
console.log(i) // 4, 3, 2, 1, 0
}
1
2
3
4
2
3
4
这里的循环别被i--误会了,其实它是condition,这里省略的是incrementExpression,巧妙的是i--到0的时候条件就是flase了,所以循环结束。
# do...while
do
statement
while (condition);
1
2
3
2
3
如果 condition 为真(true),statement 将再次执行。 在每个执行的结尾会进行条件的检查。当 condition 为假(false),执行会停止并且把控制权交回给 do...while 后面的语句
let i = 5
do {
console.log(i) // 5, 4, 3, 2, 1
i--
} while (i > 0)
1
2
3
4
5
2
3
4
5
# while 语句
while (condition)
statement
1
2
2
与上面的do...while相反,while是在执行语句之前判断条件
let i = 5
while (i>0) {
console.log(i) // 5, 4, 3, 2, 1
i--
}
1
2
3
4
5
2
3
4
5
# label 语句
label :
statement
1
2
2
一个 label 提供了一个让你在程序中其他位置引用它的标识符。例如,你可以用 label 标识一个循环, 然后使用 break 或者 continue 来指出程序是否该停止循环还是继续循环。
let num = 0
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break
}
num++
}
}
console.log(num) // 95
//
let num = 0
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue
}
num++
}
}
console.log(num) // 99
//
let num = 0
outPoint:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outPoint
}
num++
}
}
console.log(num) // 55
//
let num = 0
outPoint:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outPoint
}
num++
}
}
console.log(num) // 95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# break 语句
break [label];
1
- 当你使用不带 label 的
break时, 它会立即终止当前所在的while,do-while,for,或者switch并把控制权交回这些结构后面的语句。 - 当你使用带 label 的
break时,它会终止指定的带标记(label)的语句。
# continue 语句
continue [label];
1
- 当你使用不带 label 的
continue时, 它终止当前while,do-while,或者for语句到结尾的这次的循环并且继续执行下一次循环。 - 当你使用带 label 的
continue时, 它会应用被 label 标识的循环语句。
# for...in 语句
# for...of 语句
for...in和for...of 可以看另一篇文章for_in_and_for_of.md-----[文件地址](/Users/zengxianghui/Library/Mobile Documents/iCloud~com~coderforart~iOS~MWeb/Documents/note/frontend/for_in_and_for_of.md)