# JavaScript 基础之逻辑结构

# 顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

# 选择结构

JavaScript 提供 if 结构和 switch 结构,完成条件判断,即只有满足预设的条件,才会执行相应的语句。

if 结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。

/*  if 结构  */
if (/* 条件表达式 */) {
  // 满足条件时,执行的语句
}

/*  if...else 结构  */
if (/* 条件表达式 */){
  // 满足条件时,执行的语句
} else {
  // 不满足条件时,执行的语句
}

/*  if...else 嵌套  */
if (/* 条件表达式1 */){
  // 成立执行语句
} else if (/* 条件表达式2 */){
  // 成立执行语句
} else if (/* 条件表达式3 */){
  // 成立执行语句
} else {
  // 最后默认执行语句
}
1
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:
    // ...
}
1
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 (条件);
1
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;
}
1
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);
}
1
2
3
4
5
6
7
8
9

如果存在多重循环,不带参数的 break 语句和 continue 语句都只针对最内层循环。

# 标签(label)

JavaScript 语言允许语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签通常与 break 语句和 continue 语句配合使用,跳出特定的循环。标签的格式如下。

label:
  语句
1
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
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14

上面代码中,continue 命令后面有一个标签名,满足条件时,会跳过当前循环,直接进入下一轮外层循环。如果 continue 语句后面不使用标签,则只能进入下一轮的内层循环。

上次更新: 2020年6月18日星期四 14:37