# JavaScript 基础之逻辑结构
# 顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
# 选择结构
JavaScript 提供 if 结构和 switch 结构,完成条件判断,即只有满足预设的条件,才会执行相应的语句。
if 结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
/* if 结构 */
if (/* 条件表达式 */) {
// 满足条件时,执行的语句
}
/* if...else 结构 */
if (/* 条件表达式 */){
// 满足条件时,执行的语句
} else {
// 不满足条件时,执行的语句
}
/* if...else 嵌套 */
if (/* 条件表达式1 */){
// 成立执行语句
} else if (/* 条件表达式2 */){
// 成立执行语句
} else if (/* 条件表达式3 */){
// 成立执行语句
} else {
// 最后默认执行语句
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
多个 if...else 连在一起使用的时候,可以转为使用更方便的 switch 结构。
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
2
3
4
5
6
7
8
9
10
上面代码根据变量 fruit 的值,选择执行相应的 case 。如果所有 case 都不符合,则执行最后的 default 部分。
需要注意的是,每个 case 代码块内部的 break 语句不能少,否则会接下去执行下一个 case 代码块,而不是跳出 switch 结构。利用此机制,我们可以完成一些特殊的处理,例如:如果num等于10和等于5都要做同一件事情,那么可以写在一起,不用加 break 即可。
需要注意的是,switch 语句后面的表达式,与 case 语句后面的表达式比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
# 循环结构
循环语句用于重复执行某个操作,它有多种形式。
while (条件) {
语句;
}
for (初始化表达式; 条件; 递增表达式) {
语句
}
do {
语句
} while (条件);
2
3
4
5
6
7
8
9
10
11
每个循环结构都包含四个要素:初始值、循环控制条件、步长增量以及循环体。
do...while 循环与 while 循环类似,唯一的区别就是 do...while 循环是先运行一次循环体,然后判断循环条件,while 循环是先判断循环条件,满足条件再执行循环体。
不管条件是否为真,do...while 循环至少运行一次,这是这种结构最大的特点。另外,while 语句后面的分号注意不要省略。
break 语句和 continue 语句都具有跳转作用,可以让代码不按既有的顺序执行。
break 语句用于跳出代码块或循环。
var i = 0;
while(i < 100) {
console.log('i 当前为:' + i);
i++;
// 一旦i等于10,就会跳出循环
if (i === 10) break;
}
2
3
4
5
6
7
8
continue 语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。
var i = 0;
while (i < 100){
i++;
// 如果i为偶数,则直接进入下一轮循环。
if (i % 2 === 0) continue;
// 只有在i为奇数时,才会输出i的值。
console.log('i 当前为:' + i);
}
2
3
4
5
6
7
8
9
如果存在多重循环,不带参数的 break 语句和 continue 语句都只针对最内层循环。
# 标签(label)
JavaScript 语言允许语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签通常与 break 语句和 continue 语句配合使用,跳出特定的循环。标签的格式如下。
label:
语句
2
标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
2
3
4
5
6
7
8
9
10
11
上面代码为一个双重循环区块,break 命令后面加上了 top 标签(注意,top 不用加引号),满足条件时,直接跳出双层循环。如果 break 语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
continue 语句也可以与标签配合使用。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) continue top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
// i=2, j=0
// i=2, j=1
// i=2, j=2
2
3
4
5
6
7
8
9
10
11
12
13
14
上面代码中,continue 命令后面有一个标签名,满足条件时,会跳过当前循环,直接进入下一轮外层循环。如果 continue 语句后面不使用标签,则只能进入下一轮的内层循环。