JavaScript 的 switch...case
语句根据给定表达式的值执行不同的代码块。
下面是一个简单的 switch...case
语句示例。您可以阅读教程的其余部分以了解更多信息。
示例
let trafficLight = "green";
let message = ""
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 = 3;
let activity;
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
语句。
示例 2:使用 switch...case 的简单计算器
// take user input for two numbers
let number1 = Number(prompt("Enter the value of number1: "));
let number2 = Number(prompt("Enter the value of number2: "));
// take user input to select an operator
const operator = prompt("Enter a operator ( either +, -, * or / ): ");
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 a operator ( either +, -, * or / ): * 6 * 3 = 18
示例输出 2
Enter the value of number1: 6 Enter the value of number2: 3 Enter a operator ( either +, -, * or / ): + 6 + 3 = 9
在上面的程序中,我们提示用户
- 输入两个数字:number1 和 number2。
- 选择一个运算符:
+
、-
、*
或/
。
根据用户输入,switch
语句执行相应的计算。
注意:这里我们使用了模板字面量 `${number1} + ${number2} = ${result}`
,它将文本和变量合并到一个字符串中。
它直接在消息中显示 number1、number2 和 result 的值,例如 5 + 3 = 8
。要了解有关模板字面量的更多信息,请访问 JavaScript 模板字面量。
更多关于 JavaScript switch 语句
在 JavaScript 中不一定非要使用 default
case。例如,
let country = "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-case
的执行。
没有 break
,即使找到匹配项,程序也会继续执行后续的 case。例如,
let fruit = "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 = 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
。
JavaScript 的 switch
语句执行类型检查,确保表达式的值和类型都与 case
值匹配。例如,
let a = 1;
switch (a) {
case "1":
a = "one (string type)";
break;
case 1:
a = "one (number type)";
break;
case 2:
a = "two (number type)";
break;
default:
a = "not found";
}
console.log(`The value of a is ${a}.`);
输出
The value of a is one (number type).
在上面的程序中,我们将整数值 1 分配给变量 a。这里,
case "1"
检查 a 是否为字符串"1"
。由于 a 不是字符串类型,因此求值为false
。case 1
检查 a 是否为整数 1。由于 a 的类型和值都与case 1
匹配,因此求值为true
,从而将"one (number type)"
分配给 a。
switch...case
和 if...else
语句都用于决策。然而,switch...case
和 if...else
在不同的条件下都很有用
- 对于基于同一表达式的大量条件,请使用
switch
,这比if...else
更具可读性。 - 对于无法轻松表示为离散 case 的复杂逻辑条件,请使用
if...else
。
让我们看两个执行相同任务的程序,一个使用 switch
语句,另一个使用 if...else
// Program using switch statement
let color = "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 = "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
。
另请阅读