JavaScript switch...case 语句

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
}

这里,

  1. switch 语句首先计算 expression
  2. 之后,它会将结果与 value1 进行比较。如果找到匹配项,则执行相应的代码块。然后,break 语句会立即停止对其他 case 的进一步检查。
  3. 如果 value1 没有匹配项,程序将把结果与下一个指定的 case 值(value2)进行比较。此过程一直持续到找到匹配的 case 为止。
  4. 如果没有 case 值匹配,则执行 default 块中的代码块。

让我们通过下面的流程图来理解这个过程。


switch 语句的流程图

Flowchart of JavaScript switch statement
JavaScript 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 代表 Sunday2 代表 Monday,依此类推)。

在这里,switch 语句将 day 的值与一系列 case 进行比较

  1. 首先,它将 daycase 1 进行比较。由于不匹配,因此跳过此 case。
  2. 接下来,它将 daycase 2 进行比较。由于不匹配,因此跳过此 case。
  3. 然后,它将 daycase 3 进行比较。由于匹配,因此执行其代码块(打印 Tuesday)。
  4. 打印 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

在上面的程序中,我们提示用户

  • 输入两个数字:number1number2
  • 选择一个运算符:+-*/

根据用户输入,switch 语句执行相应的计算。

注意:这里我们使用了模板字面量 `${number1} + ${number2} = ${result}`,它将文本和变量合并到一个字符串中。

它直接在消息中显示 number1number2result 的值,例如 5 + 3 = 8。要了解有关模板字面量的更多信息,请访问 JavaScript 模板字面量


更多关于 JavaScript switch 语句

default case 是可选的。

在 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 语句主体之后的行。

当我们在没有 break 的情况下使用 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 值触发相同的代码块。为此,我们可以使用多个具有单个代码块的 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匹配第三组的第二个 casecase 19),因此输出打印为 Late Teen

JavaScript switch 语句执行严格的类型检查。

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 语句与 if...else 语句的比较。

switch...caseif...else 语句都用于决策。然而,switch...caseif...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


另请阅读

在结束之前,让我们将您对 JavaScript switch...case 语句的知识进行测试!您能解决以下挑战吗?

挑战

编写一个函数来执行基本的算术运算。

  • 操作包括:+ 表示加法,- 表示减法,* 表示乘法,/ 表示除法。
  • 给定 num1num2op 来指定要执行的操作,返回结果。
  • 例如,如果 num1 = 5op = "+"num2 = 3,则预期输出为 8

视频:JavaScript switch 语句

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战