JavaScript switch:case 分支与 default 兜底

JavaScript switch 语句会先计算一次表达式,然后使用严格相等(===)把执行流路由到匹配的 case 标签。当每个分支都在用同一个变量匹配离散值时,它比 if...else 链更清晰,例如命令分发、状态映射或固定选项处理。switch 把这种按值分流集中在一个代码块里,并通过 break 明确控制是否继续向后贯穿执行。

JavaScript Switch 按值分流示例

输出:

输出将显示在这里...

输出:

正在保存文件

这个示例如何工作

  1. switch (command) 会先计算 command 一次,然后按源码顺序把结果和每个 JavaScript case 标签比较。
  2. "保存" 这个 case 匹配成功,执行流跳到该分支并运行 console.log("正在保存文件")
  3. break 会直接退出整个 switch 代码块。没有它时,执行会继续贯穿到下一个 case 的代码体,即使下一个标签不匹配。
  4. default 是兜底分支:当没有任何 case 标签匹配时执行。若 default 在最后一个位置,后面不需要再写 break

case "保存": 这种 JavaScript case statement 里,标签是“要匹配的值”,不是单独的布尔条件。

JavaScript Switch Case 的常见错误

忘记写 break 缺少它会导致执行贯穿到后续每个 case 代码体。只有在你明确要把多个标签归并到同一处理逻辑时才应省略 break

const command = "保存";

switch (command) {
  // 错误:当 command 是 "保存" 时会打印两条消息
  case "保存":
    console.log("正在保存");
  case "关闭":
    console.log("正在关闭");
}

case 标签里混用类型: switch 使用 ===,所以 "2" 永远不会匹配 2。进入 switch 前先把表达式转换成一致类型。

在多个 case 里重复声明 let/const 所有 case 共享同一个 switch 块级作用域。两个分支都声明 let result 会抛出 SyntaxError,应给每个 case 包一层 { } 以创建独立词法作用域。

Switch 与 if…else 对比

适合用 switch 的场景适合用 if...else 的场景
把一个表达式和多个固定值比较条件涉及区间、不等式或不同变量
需要通过贯穿把多个 case 复用同一处理逻辑每个分支都有独立的复合逻辑

当值到动作的映射很大时,用对象查表有时比这两种写法都更清晰。记得处理缺失键,避免把 undefined 当函数调用。

更多示例

把多个 case 标签归并到同一处理逻辑:

const day = "周六";
switch (day) {
  case "周六":
  case "周日":
    console.log("周末");
    break;
  default:
    console.log("工作日");
}

在标签之间不写 break,可以把列出的所有值路由到同一个代码块。共享处理逻辑应保持简短,并用 breakreturnthrow 结束,避免误执行后续分支。 如果每个标签需要不同处理,避免使用贯穿,让每个 case 都有独立代码体和退出点。

FAQ

JavaScript switch 用的是 == 还是 ===

switch 使用严格相等(===)比较。它不会做类型转换,所以 0 不匹配 "0"null 也不匹配 undefined。确保表达式和值标签的类型一致。

在 switch case 里省略 break 会发生什么?

执行会贯穿到下一个 case 的代码体,不管下一个标签是否匹配。这个过程会一直持续到遇到 breakreturn 或到达 switch 末尾。刻意贯穿通常用于让多个 case 共用同一处理逻辑。

default 可以写在其他 cases 前面吗?

可以。defaultswitch 块里的位置不受限制。它仍然只会在没有任何 case 匹配时运行,然后从该位置继续向后执行,因此除非它本身就在最后一个分支,否则需要在 default 后写 break