javascript的switch-case仅支持原始类型严格匹配,依赖===不转换类型;支持数字、字符串、布尔、undefined、null、symbol;不支持对象、数组、函数等引用类型直接匹配。

JavaScript 的 switch-case 语句天然支持多种原始数据类型匹配,靠的是严格相等(===)机制,不发生隐式类型转换。只要 case 后的值与 switch 表达式的值在类型和内容上完全一致,就能准确命中。
支持的常见数据类型
switch 可直接匹配以下类型的字面量或常量:
-
数字:包括整数、小数、负数(如
case 0:、case -1.5:) -
字符串:区分大小写和空格(如
case "hello":、case "":) -
布尔值:
true和false是独立分支(case true:不会匹配数字1) -
undefined / null:各自独立,互不匹配(
case undefined:和case null:需分开写) -
Symbol:每个 Symbol 值唯一,仅能匹配自身创建的 Symbol(
case Symbol("a"):)
类型不一致就无法匹配
这是最容易出错的地方。switch 不会自动转换类型,所以:
-
"42"和42属于不同分支 -
true≠1,false≠0 -
null === undefined为false,因此case null:和case undefined:必须分开处理 -
NaN永远不会被任何case NaN:命中(因为NaN === NaN是false)
处理混合类型输入的实用方法
当输入来源不确定(比如用户输入、API 返回),建议先统一类型再进 switch:
- 转成字符串:
switch (String(input)) { case "1": ... } - 转成数字:
switch (Number(input)) { case 1: ... }(注意Number("abc")得NaN,需用default捕获) - 用
typeof分类后嵌套 switch:switch (typeof input) { case "string": ... case "number": ... } - 对复杂判断(如范围、数组、对象),switch 不适用,应改用 if 或
switch(true)+ 条件表达式
不支持的对象和函数
对象字面量、数组、函数等引用类型不能直接用于 case 值,因为它们每次创建都是新地址,=== 比较结果恒为 false:
-
case {a: 1}:❌ 语法合法但永远不匹配 -
case [1, 2]:❌ 同样无效 - 若需按对象结构分支,应提取关键属性(如
input.id或input.type)作为 switch 表达式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











