JavaScript的switch语句使用严格相等(===),要求值和类型完全一致;数字65与字符串'65'、true与1、null与undefined、0与false均不匹配;NaN永不匹配;对象需用变量引用;范围判断宜用switch(true)配合布尔表达式。

JavaScript 的 switch 语句内部用的是严格相等(===),不是宽松相等(==)。这意味着值和类型都必须完全一致,稍有偏差就匹配失败——这是最容易踩坑的地方。
类型必须一模一样
数字 65 和字符串 '65' 在 switch 中不相等,哪怕看起来一样:
-
let x = 65; switch(x) { case '65': ... }→ 不执行 -
let x = '65'; switch(x) { case 65: ... }→ 也不执行 - 只有
case 65配x = 65,或case '65'配x = '65'才匹配
布尔值、null、undefined 不能混用
它们各自是独立类型,不会自动转换:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
switch(true) { case 1: ... }→ 不匹配(true !== 1) -
switch(null) { case undefined: ... }→ 不匹配(null !== undefined) -
switch(0) { case false: ... }→ 不匹配(0 !== false)
NaN 和对象引用的特殊性
NaN === NaN 是 false,所以 case NaN 永远不会命中:
立即学习“Java免费学习笔记(深入)”;
-
switch(NaN) { case NaN: console.log('hi'); }→ 完全不运行 - 对象比较看的是引用,不是内容:
{a:1} !== {a:1},所以case后写对象字面量基本无效 - 但可以用变量名作
case:const obj = {}; switch(someVal) { case obj: ... }可行
想用条件判断?改用 switch(true)
当需要做范围或逻辑判断(比如满减、分数等级),别硬塞值进去,把表达式结果交给 switch(true):
switch(true) { case score >= 90: grade = 'A'; break; case score >= 80: grade = 'B'; break; }- 每个
case后是布尔表达式,整体靠true === true匹配 - 注意顺序:从上到下第一个为
true的case就执行,后面的不再检查

















