JavaScript 的 switch 语句用于精确值匹配,基于严格相等(===)比较,支持字符串、数字等字面量,需 break 防穿透,无范围判断能力,适用枚举场景;范围判断应使用 if。

JavaScript 中的 switch 语句是处理多分支选择的简洁方式,特别适合根据一个表达式的**精确值**匹配多个固定状态。它比一长串 if...else if...else 更清晰、更易读。
switch 的基本结构和匹配逻辑
switch 会先计算一次表达式的值,然后依次与每个 case 后的字面量(或常量表达式)进行**严格相等比较(===)**,一旦匹配就执行对应代码块,直到遇到 break 或语句结束。
- 每个
case后必须是能被静态求值的值(如字符串、数字、布尔值、null、undefined、Symbol),不能是变量或函数调用 - 漏写
break会导致“穿透”(fall-through):继续执行下一个 case 的代码,这有时是有意为之,但多数情况是 bug -
default不是必需的,但强烈建议加上,用于兜底处理未覆盖的状态
常见使用场景示例
比如处理用户权限等级、HTTP 状态码、表单验证结果等明确枚举值的场景:
const statusCode = 404;
switch (statusCode) {
case 200:
console.log('请求成功');
break;
case 401:
console.log('未授权,请登录');
break;
case 403:
console.log('禁止访问');
break;
case 404:
console.log('资源不存在');
break;
default:
console.log('其他状态:', statusCode);
}
注意 switch 无法直接处理的“范围匹配”
switch 本身不支持像 case > 18: 或 case 10..20: 这样的区间判断——它只做精确匹配。若需范围判断,仍应使用 if...else:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- 错误写法:
case age > 18:(语法错误) - 正确替代:
if (age > 18) { ... } else if (age >= 12) { ... } - 折中技巧:可把范围映射为离散标签再用 switch,例如
const level = age >= 65 ? 'senior' : age >= 18 ? 'adult' : 'minor'; switch(level) { ... }
switch 和 if 的选择建议
优先选 switch 当:
- 判断依据是单个变量或表达式,且取值是有限、已知的几个确定值
- 分支较多(通常 ≥ 3),代码可读性和维护性更重要
- 需要显式表达“互斥枚举”的语义(比如状态机中的 state)
继续用 if 当:
- 条件涉及比较运算(
>,<=,!=)、逻辑组合(&&,||)或函数调用 - 分支较少(1–2 个),if 更直接
- 需要提前返回或中断流程(如在循环中 break switch 需带标签,而 if 更自然)

















