选择语句
在 TypeScript 中,可以通过选择语句,根据一定条件决定执行哪一段代码。选择语句的执行流程如图5-2所示。常见的选择语句有 if
、if…else
、if…else if
及 switch
等。接下来,将分别进行介绍。

if/if…else/if…else if语句
if/if…else/if…else if
是常用的选择语句,表达类似于 “如果……则执行……否则……执行” 的含义,它包含以下 3 种语句。
-
if
:如果if
语句中的条件表达式值为true
,则执行代码。 -
if…else
:如果上一个if
或else if
语句中的条件表达式值为false
,则执行代码。 -
if…else if
:如果上一个if
或else if
语句中的条件表达式值为false
,且当前else if
语句中的条件表达式值为true
,则执行代码。
if/if…else/if…else if
语句中还可以嵌套 if/if…else/if…else if
语句,形成更复杂的判断。接下来,将详细介绍上述 3 种语句的用法。
-
if 语句
当
if
语句中的条件表达式值为true
时,if
之后的代码块将被执行;否则,不执行。语法如下。
if (条件表达式) { //当条件为 true 时需要执行的代码 }
示例代码如下。
let score: number = 61; if (score >= 60) { console.log("及格"); } if (score < 60) { console.log("不及格"); }
代码执行结果如下。
> 及格
-
if…else 语句
else
语句不能单独出现,必须配合if
语句才能使用。当if
语句中的条件表达式值为false
时,在else
之后的代码块将执行。语法如下。
if (条件表达式) { //当条件为 true 时需要执行的代码 } else { //当条件为false 时需要执行的代码 }
示例代码如下。
let hour: number = 15; if (hour < 12) { console.log("上午"); } else { console.log("下午"); }
代码执行结果如下。
> 下午
当条件表达式的值不是布尔类型时,将触发隐式转换,将其转换为布尔类型再做判断,示例代码如下。
if ("hello") { console.log("world");//输出"world" }
以上代码等同于以下代码。
if (Boolean("hello")) { console.log("world");//输出"world" }
-
if…else if 语句
else if
语句也不能单独出现,必须配合if
语句才能使用。当上一个if
或else if
语句中的条件表达式的值为false
而当前else if
的条件表达式值为true
时,代码块将执行。在一个连续的选择语句中,
if
语句只能在句首使用,else
语句只能在句尾使用,并且它们只能使用一次,而else if
语句只能在它们之间使用,次数不限。语法如下。
if (条件表达式 1) { //当条件表达式1为true时执行的代码块 } else if (条件表达式2) { //当条件表达式1为false,且条件表达式2为true时执行的代码块 } else if (条件表达式3) { //当条件表达式1、2均为false,且条件表达式3为true时执行的代码块 } //...可以追加无数个else if语句 else { //else 语句不是必需的 //当以上所有条件表达式均为false时执行的代码块 }
示例代码如下。
let month: number = 8; if (month <= 3) { console.log("第1季度"); } else if (month <= 6) { console.log("第2季度"); } else if (month <= 9) { console.log("第3季度"); } else { console.log("第4季度"); }
代码执行结果如下。
> 第3季度
-
语句嵌套
当需要同时使用多个判定条件,或逻辑较复杂时,单层的 if…else
语句可能很难理清逻辑,因此我们可以使用语句嵌套的方式,将 if…else
语句写到上一层 if…else if
语句的待执行代码块中。
例如,要实现以下逻辑。
-
如果工作未满 2 年,发 1 倍月薪的年终奖;如果月薪高于 5000 元,则发 1.2 倍月薪的年终奖。
-
如果工作满 2 年但未满 5 年,发 1.5 倍月薪的年终奖;如果月薪高于 10000 元,则发 1.7 倍月薪的年终奖。
-
如果工作满 5 年以上,发 2 倍月薪的年终奖;如果月薪高于 15000 元,则发 2.2 倍月薪的年终奖。
示例代码如下。
let year: number = 4;
let salary: number = 12000;
let bonus: number;
if (year < 2) {
if (salary < 5000) {
bonus = salary;
} else {
bonus = salary * 1.2;
}
} else if (year >= 2 && year < 5) {
if (salary < 10000) {
bonus = salary * 1.5;
} else {
bonus = salary * 1.7;
}
} else {
//工作满5年
if (salary < 15000) {
bonus = salary * 2;
} else {
bonus = salary * 2.2;
}
}
console.log(`年终奖为${bonus}`);
输出结果如下。
> 年终奖为20400
|
switch语句
除以上语句之外,还可以用 switch
语句来选择需要执行的代码块。和 if/if…else/if…else if
语句不同的是,switch
语句的条件表达式的计算结果可以是任何类型的值,而 if/if…else/if…else if
语句的条件表达式的计算结果只能是布尔类型的值。
switch
语句的语法如下。
switch(条件表达式) {
case 值1:
//代码块1
break;
case 值2:
//代码块2;
break;
...
case 值n:
//代码块n
break;
default:
//如果以上条件均不满足,则执行默认代码块
}
当执行 switch
语句时,会先计算条件表达式的值,然后与 case
语句上的值进行比较,如果 case
语句的值与条件表达式的值相等,则会执行对应的代码块。
-
基本运用
以下是
switch
语句的基本运用示例,共有 7 个分支。当待执行的语句只有一行时,省略代码块的花括号(如分支1~5);而当待执行的语句具有多行时,则建议使用花括号来标记范围。let today: number = 6 switch (today) { case 1: console.log("星期一"); break; case 2: console.log("星期二"); break; case 3: console.log("星期三"); break; case 4: console.log("星期四"); break; case 5: console.log("星期五"); break; case 6: { console.log("今天是休息日"); console.log("星期六"); } break; case 7: { console.log("今天是休息日"); console.log("星期日"); } break; }
代码执行结果如下。
> 今天是休息日 > 星期六
-
break与default关键字
break
关键字通常放在每个代码块的末尾,表示结束整个 switch
语句的执行。如果当前 case
语句不带 break
关键字,在执行完当前代码块后,会接着执行后面分支的代码块,直到遇到 break
关键字或者没有后续分支为止。示例代码如下。
let a: number = 1;
switch (a) {
case 1:
console.log("1");
case 2:
console.log("2");
case 3:
console.log("3");
case 4:
console.log("4");
break;
case 5:
console.log("5");
break;
}
由于分支 1~3 都没带 break
关键字,因此代码从分支 1 开始依次执行,直到分支 4 遇到 break
关键字,才结束整个 switch
语句的执行。代码执行后,输出结果如下。
> 1
> 2
> 3
> 4
在省略部分分支的 break
关键字时,多个分支还可以共用同一个代码块,示例代码如下。
let today: number = 1;
switch (today) {
case 1:
case 2:
case 3:
case 4:
case 5:
console.log("工作日");
break;
case 6:
case 7:
console.log("休息日");
break;
}
输出结果如下。
> 工作日
switch
语句条件表达式的值有时并不在任何 case
语句中,为了使用一个默认分支来处理预期外的情况,就需要用 default
关键字。当 default
关键字前面的所有 case
语句均不满足执行条件时,就会执行 default
关键字后的语句。一个 switch
语句中最多只能包含一个 default
关键字。
关于 default
关键字的示例代码如下。
let today: number = 996;
switch (today) {
case 1:
case 2:
case 3:
case 4:
case 5:
console.log("工作日");
break;
case 6:
case 7:
console.log("休息日");
break;
default:
console.log("此星期不存在!");
break;
}
由于 996 无法满足所有 case
语句的条件,因此会执行 default
关键字后的语句,输出结果如下。
> 此星期不存在!