# switch case
在本教程中,你将学习 TypeScript 中的 switch case 语句
# TypeScript 中的 switch case 语句
下面展示了 switch case 语句的语法:
switch (expression) {
  case value1:
    // statement 1
    break;
  case value2:
    // statement 2
    break;
  case valueN:
    // statement N
    break;
  default:
    //
    break;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
它是这样工作的:
- 首先,switch case语句计算expression的值;
- 然后,它搜索第一个计算出来的值 (value1,value2和valueN等等) 与expression计算出来的值相同的case从句。
switch case 语句会执行第一个匹配的 case 从句中的语句。如果没有发现匹配的 case 从句,switch case 语句会寻找可选的 default 从句,如果 default 从句可用,它会执行 default 从句中的语句。
与每个 case 从句相关联的 break 语句保证当 case 从句中的语句执行完毕的时候,从 switch case 语句中跳出。如果匹配的 case 从句没有 break 语句,程序会继续 switch case 语句后面的语句。
按照惯例, default 从句是 switch case 语句的最后一个从句,但这不是强制要求的。
# switch case 语句例子
让我们看几个 switch case 语句的例子
# 1) 一个简单的 switch case 例子
下面展示了一个简单的 switch case 例子,它会基于 targetId 的值来展示不同的信息:
let targetId = 'btnDelete';
switch (targetId) {
  case 'btnUpdate':
    console.log('Update');
    break;
  case 'btnDelete':
    console.log('Delete');
    break;
  case 'btnNew':
    console.log('New');
    break;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
输出:
Delete
1
在这个例子中,targetId 赋值为 btnDelete。switch case 语句将 targetId 与一组值进行比较,因为 targetId 匹配了 'btnDelete',对应的 case 从句中的语句会被执行。
# 2) case 分组案例
如果你希望一段代码被多个 case 共享,你可以对它们进行分组,如下所示:
// change the month and year
let month = 2,
  year = 2020;
let day = 0;
switch (month) {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12:
    day = 31;
    break;
  case 4:
  case 6:
  case 9:
  case 11:
    day = 30;
    break;
  case 2:
    // leap year
    if ((year % 4 == 0 && !(year % 100 == 0)) || year % 400 == 0) day = 29;
    else day = 28;
    break;
  default:
    throw Error('Invalid month');
}
console.log(`The month ${month} in ${year} has ${day} days`);
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
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
输出:
The month 2 in 2020 has 29 days
1
这个案例返回指定年份及月份下对应的天数:
- 如果月份是 1357810或者12,返回的天数为31;
- 如果月份是 469或者11,返回的天数为30天
- 如果月份是 2并且是闰年的话,返回29天,否则返回28天。