JavaScript switch 语句

switch 是 JavaScript 中的一种条件语句,用于根据不同的条件执行不同的操作。

switch 是 JavaScript 中的一种条件语句,用于根据不同的条件执行不同的操作。

switch 语法

switchif ... else 语句类似,不同的是,switch 只对一个表达式的结果进行评估,根据表达式不同的运算结果,选择执行不同的 case 子句。

switch (expression) {
  case x:
    // 当表达式结果为 x 时,执行这里的代码
    break;
  case y:
    // 当表达式结果为 y 时,执行这里的代码
    break;
  default:
  // 当表达式结果匹配不到 case 时,默认执行的代码
}

switch 的工作原理为:

  • 首先计算 switch 表达式的结果。
  • 将表达式的结果与每个 case 的值进行比较。
  • 如果找到对应的 case,则执行此 case 代码块。如果遇到 break 则跳出 switch,否则继续执行下一个 case 代码块,知道遇到 break
  • 如果没有对应的 case,则执行 default 代码块。

每个 case 代表了一种表达式可能的计算结果,default 则代表了默认的情况,找不到相应的 case 的时候执行 default

以下示例,通过 switch 返回当前日期时星期几:

switch (new Date().getDay()) {
  case 0:
    day = "星期日";
    break;
  case 1:
    day = "星期一";
    break;
  case 2:
    day = "星期二";
    break;
  case 3:
    day = "星期三";
    break;
  case 4:
    day = "星期四";
    break;
  case 5:
    day = "星期五";
    break;
  case 6:
    day = "星期六";
}

break 关键字

当 JavaScript 遇到 break 关键字时,它会跳出 switch 块。

如果匹配的 case 代码块运行结束后没有遇到 break,则会执行下一个 case 代码块,一直到遇到 break 跳出或者运行到最后。所以如果忽略了 break,则可能会与自己的预期不相同。

最后一个 case 代码块后者 default 代码块可以省略 break,因为他们已经是最后的代码段了。

可以在浏览器控制台中试一下下面的忘记了 break 的函数:

function test(x) {
  switch (x) {
    case 1:
      console.log("1");
    case 2:
      console.log("2");
    default:
      console.log("not 1 and 2");
  }
}

当我们执行 test(1) 的时候,浏览器控制台的输出如下:

1
2
not 1 and 2

这就是忘了 break 的后果。

default 关键字

default 代码块是 swtich 表达式结果匹配不到对应的 case 时, 默认要执行的代码块。

getDay() 方法将工作日作为 0 到 6 之间的数字返回。

下面的例子中当前日期如果不是周六或者周日,显示一条默认消息:

switch (new Date().getDay()) {
  case 6:
    text = "今天是星期六";
    break;
  case 0:
    text = "今天是星期日";
    break;
  default:
    text = "如果今天是周末多好啊!";
}

default 代码块不一定放在最后:

switch (new Date().getDay()) {
  default:
    text = "如果今天是周末多好啊!";
    break;
  case 6:
    text = "今天是星期六";
    break;
  case 0:
    text = "今天是星期日";
}

如果 default 不是 switch 块中的最后一种情况,以 break 结束。

通用代码块

我们还可以让多个 case 使用相同的逻辑操作。

在此示例中,当前日期如果是周六或者周日,显示相同的信息:

switch (new Date().getDay()) {
  case 0:
  case 6:
    text = "今天是周末,太棒了!";
    break;
  default:
    text = "如果今天是周末多好啊!";
}

严格比较

Switch case 使用的是严格比较 (===)。

严格比较不但要比较值的内容,还要比较值的类型。只要值和类型都匹配的时候,才能评估通过。

在这个例子中,x 将不匹配:

let x = "0";
switch (x) {
  case 0:
    text = "Off";
    break;
  case 1:
    text = "On";
    break;
  default:
    text = "No value found";
}