注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
TypeScript switch...case
语句根据给定表达式的值执行不同的代码块。
这是一个简单的 switch...case
语句的例子。您可以阅读其余的教程以了解更多信息。
示例
let trafficLight: string = "green";
let message: string = ""
switch (trafficLight) {
case "red":
message = "Stop immediately.";
break;
case "yellow":
message = "Prepare to stop.";
break;
case "green":
message = "Proceed or continue driving.";
break;
default:
message = "Invalid traffic light color.";
}
console.log(message)
// Output: Proceed or continue driving.
上面的程序检查 trafficLight 的值并打印其相应的含义。如果值与任何指定的 case 不匹配,则打印 无效的交通灯颜色。
switch...case 语句的语法
switch (expression) {
case value1:
// Code block to be executed
// if expression matches value1
break;
case value2:
// Code block to be executed
// if expression matches value2
break;
...
default:
// Code block to be executed
// if expression doesn't match any case
}
这里,
switch
语句首先评估expression
。- 之后,它将结果与 value1 进行比较。如果找到匹配项,则执行相应的代码块。然后,
break
语句会立即停止对其他 case 的进一步检查。 - 如果没有 value1 的匹配项,程序将结果与下一个指定的 case 值(value2)进行比较。此过程将继续进行,直到找到匹配的 case 为止。
- 如果没有任何 case 值匹配,则执行
default
块中的代码。
让我们通过下面的流程图来理解这个过程。
switch 语句的流程图

示例 1:使用 switch...case 的简单程序
假设我们想根据一周中的当前日期显示一条消息。让我们看下面的例子,了解如何使用 switch...case
来实现这一点。
let day: number = 3;
switch (day) {
case 1:
console.log("Sunday");
break;
case 2:
console.log("Monday");
break;
case 3:
console.log("Tuesday");
break;
case 4:
console.log("Wednesday");
break;
case 5:
console.log("Thursday");
break;
case 6:
console.log("Friday");
break;
case 7:
console.log("Saturday");
break;
default:
console.log("Invalid Day");
}
输出
Tuesday
此程序根据 day 变量中存储的数字打印日期(1 代表 Sunday
,2 代表 Monday
,依此类推)。
在这里,switch
语句将 day 的值与一系列 case 进行比较
- 首先,它将 day 与
case 1
进行比较。由于不匹配,此 case 被跳过。 - 接下来,它将 day 与
case 2
进行比较。由于不匹配,此 case 被跳过。 - 然后,它将 day 与
case 3
进行比较。由于存在匹配项,因此执行其代码块(打印Tuesday
)。 - 打印
Tuesday
后,遇到break
语句,该语句终止switch
语句。
注意:由于 TypeScript 的严格类型检查,您不能用其他类型的 case
值来检查一种类型的变量/表达式。例如,
let day: number = 3;
switch (day) {
// Error due to comparison between number variable and string literal
case "1":
console.log("Sunday");
break;
... ... ...
}
示例 2:使用 switch...case 的简单计算器
// Take user input for first number
let userInput: string | null = prompt("Enter the value of number1: ");
const number1: number = Number(userInput);
// Take user input for second number
userInput = prompt("Enter the value of number2: ");
const number2 = Number(userInput);
// Take user input to select an operator
const operator: string | null = prompt("Enter an operator ( either +, -, * or / ): ");
// Variable to store the result of calculation
let result: number;
switch(operator) {
case "+":
result = number1 + number2;
console.log(`${number1} + ${number2} = ${result}`);
break;
case "-":
result = number1 - number2;
console.log(`${number1} - ${number2} = ${result}`);
break;
case "*":
result = number1 * number2;
console.log(`${number1} * ${number2} = ${result}`);
break;
case "/":
result = number1 / number2;
console.log(`${number1} / ${number2} = ${result}`);
break;
default:
console.log("Invalid operator");
}
示例输出 1
Enter the value of number1: 6 Enter the value of number2: 3 Enter an operator ( either +, -, * or / ): * 6 * 3 = 18
示例输出 2
Enter the value of number1: 6 Enter the value of number2: 3 Enter an operator ( either +, -, * or / ): + 6 + 3 = 9
在上面的程序中,我们提示用户
- 输入两个数字:number1 和 number2。
- 选择一个运算符:
+
、-
、*
或/
。
根据用户输入,switch
语句执行相应的计算。
注意:在这里,我们使用了模板字面量 `${number1} + ${number2} = ${result}`
,它将文本和变量合并到一个字符串中。
它直接在消息中显示 number1、number2 和 result 的值,例如 5 + 3 = 8
。要了解有关模板字面量的更多信息,请访问 TypeScript 模板字面量。
更多关于 TypeScript switch 语句
在 TypeScript 中不必使用 default
case。例如,
let country: string = "Nepal";
switch (country) {
case "USA":
console.log("American");
break;
case "UK":
console.log("British");
break;
case "Japan":
console.log("Japanese");
}
console.log("Code after switch statement")
// Output: Code after switch statement
我们在上面的程序中没有使用 default
case。此外,country 变量的值与 switch
语句中的任何 case 都不匹配。
在这种情况下,switch
语句将被完全跳过,程序流程将转到 switch
语句主体之后的行。
到目前为止,我们在每个 case
块中都使用了 break
语句。例如,
case 2:
console.log("Monday");
break;
break
语句在找到匹配的 case 后会终止 switch
语句的执行。
如果没有 break
,程序将在找到匹配项后继续执行后续的 case。例如,
let fruit: string = "banana";
switch (fruit) {
case "apple":
console.log("Apple case");
case "banana":
console.log("Banana case");
case "orange":
console.log("Orange case");
default:
console.log("Unknown fruit");
}
输出
Banana case Orange case Unknown fruit
有时,我们可能希望多个 case 值触发相同的代码块。为此,我们可以使用具有单个代码块的多个 case。
让我们看一个例子来清楚地理解这一点。
// Program to categorize age
let age: number = 19;
switch (age) {
// When age is 13, 14, or 15
case 13:
case 14:
case 15:
console.log("Early Teen")
break;
// When age is 16 or 17
case 16:
case 17:
console.log("Mid Teen");
break;
// When age is 18 or 19
case 18:
case 19:
console.log("Late Teen");
break;
// When age is none of the above
default:
console.log("Other Age Group");
}
输出
Late Teen
在此程序中,我们将多个 case 分组在一起,这允许我们为组中的所有 case 使用一个代码块。这些组是
- case 13、14 和 15 - 在屏幕上打印
Early Teen
。 - case 16 和 17 - 在屏幕上打印
Mid Teen
。 - case 18 和 19 - 在屏幕上打印
Late Teen
。
由于 19 匹配第三组中的第二个 case
(case 19
),因此输出打印 Late Teen
。
switch...case
和 if...else
语句都用于决策。但是,它们在不同的条件下很有用
switch
- 当基于同一表达式检查大量条件时使用它,这比if...else
更具可读性。if...else
- 用于无法轻松表示为离散 case 的复杂逻辑条件。
让我们看两个执行相同任务的程序,一个使用 switch
语句,另一个使用 if...else
// Program using switch statement
let color: string = "green";
switch (color) {
case "red":
console.log("Stop");
break;
case "yellow":
console.log("Caution");
break;
case "green":
console.log("Go");
break;
default:
console.log("Invalid color");
}
// Output: Go
在上面的程序中,将 color 变量与每个 case 进行比较。当它匹配 "green"
case 时,输出打印 Go
。
// Program using if...else statement
let color: string = "green";
if (color === "red") {
console.log("Stop");
}
else if (color === "yellow") {
console.log("Caution");
}
else if (color === "green") {
console.log("Go");
}
else {
console.log("Invalid color");
}
// Output: Go
在这里,if...else
语句将 color 的值与各种条件进行比较。
当 color 匹配 "green"
时,执行相应的块,输出打印 Go
。
另请阅读