JavaScript 中的 switch 语句是一种条件语句,用于根据表达式的值执行不同的代码块。表达式被评估,如果它的值与某个 case 标签的值匹配,则执行与该 case 关联的代码块。如果没有 case 标签与表达式的值匹配,则执行与 default 标签关联的代码块(如果有的话)。
你可以使用多个 if...else...if 语句来实现多路分支,就像在前面章节中讨论的一样。然而,这并不总是最佳解决方案,尤其是在所有分支都依赖于单一变量的值的情况下。
从 JavaScript 1.2 开始,你可以使用 switch 语句来处理这种情况,并且比重复使用 if...else if 语句更高效。
流程图
下面的流程图解释了 switch-case 语句的工作原理。

语法
switch 语句的目标是给定一个表达式来评估,并基于该表达式的值执行若干不同的语句。解释器检查每个 case 是否与表达式的值相匹配,直到找到一个匹配为止。如果没有匹配项,则使用默认条件。
switch (expression) {
case condition 1: statement(s)
break;
case condition 2: statement(s)
break;
...
case condition n: statement(s)
break;
default: statement(s)
}
参数说明
-
break:此关键字指示特定 case 的结束。如果省略了 break 语句,解释器将继续执行后续每个 case 中的每条语句。
-
default:default 关键字用于定义默认表达式。当没有任何 case 匹配 switch-case 语句的表达式时,它会执行默认代码块。
示例
让我们通过一些例子来详细了解 switch case 语句。
示例
在下面的例子中,我们有一个 grade 变量,并将其作为 switch case 语句的表达式使用。switch case 语句根据 grade 变量的值执行不同的代码块。
对于 grade 为 'A' 的情况,它会在输出中打印 'Good job' 并终止 switch case 语句,因为我们使用了 break 语句。
<html>
<head>
<title>JavaScript - Switch case 语句</title>
</head>
<body>
<p id="output"> </p>
<script>
const output = document.getElementById("output");
let grade = 'A';
output.innerHTML += "Entering switch block <br />";
switch (grade) {
case 'A': output.innerHTML += "Good job <br />";
break;
case 'B': output.innerHTML += "Passed <br />";
break;
case 'C': output.innerHTML += "Failed <br />";
break;
default: output.innerHTML += "Unknown grade <br />";
}
output.innerHTML += "Exiting switch block";
</script>
</body>
</html>
输出
Entering switch block
Good job
Exiting switch block
break 语句在 switch-case 语句中起着重要作用。尝试下面的例子,该例子使用 switch-case 语句而不带任何 break 语句。
示例:没有 break 语句
当我们不在 switch case 语句的任何 case 中使用 break 语句时,它会继续执行下一个 case 而不终止。
在下面的代码中,我们没有在 case 'A' 和 case 'B' 中使用 break 语句。所以,对于 grade 为 'A' 的情况,它将执行 A, B, 和 C 的 case 语句,然后终止 switch case 语句的执行。
<html>
<head>
<title>JavaScript - Switch case 语句</title>
</head>
<body>
<p id="output"> </p>
<script>
const output = document.getElementById("output");
let grade = 'A';
output.innerHTML += "Entering switch block<br />";
switch (grade) {
case 'A': output.innerHTML += "Good job <br />";
case 'B': output.innerHTML += "Passed <br />";
case 'C': output.innerHTML += "Failed <br />";
default: output.innerHTML += "Unknown grade <br />";
}
output.innerHTML += "Exiting switch block";
</script>
</body>
</html>
输出
Entering switch block
Good job
Passed
Failed
Unknown grade
Exiting switch block
示例:共享代码块
有时,开发人员需要为表达式的多个值执行相同的代码块。这非常类似于 if-else 语句中的 OR 条件。
在下面的代码中,我们在 A 和 B 以及 C 和 D 的情况下执行相同的代码块。你可以尝试更改 grade 变量的值并观察输出。
<html>
<head>
<title>JavaScript - Switch case 语句</title>
</head>
<body>
<p id="output"> </p>
<script>
let output = document.getElementById("output");
var grade = 'C';
output.innerHTML += "Entering switch block <br />";
switch (grade) {
case 'A':
case 'B': output.innerHTML += "Passed <br />";
break;
case 'C':
case 'D': output.innerHTML += "Failed! <br />";
break;
default: output.innerHTML += "Unknown grade <br />";
}
output.innerHTML += "Exiting switch block";
</script>
</body>
</html>
输出
Entering switch block
Failed!
Exiting switch block
示例:严格比较
switch case 语句使用严格的相等运算符 (===) 来比较表达式的值与 case 值。
在下面的代码中,num 变量包含一个整数值。而在 switch case 语句中,所有的 case 都是字符串形式的。因此,代码执行了默认语句。
<html>
<head>
<title>JavaScript - Switch case 语句</title>
</head>
<body>
<p id="output"> </p>
<script>
const output = document.getElementById("output");
let num = 10;
switch (num) {
case '10': output.innerHTML += "10 Marks!";
break;
case '11': output.innerHTML += "11 Marks!";
break;
default: output.innerHTML += "Input is not a string!";
}
</script>
</body>
</html>
输出
Input is not a string!