← 返回目录

11. switch 等值匹配

switch 就是等值匹配,一个变量跟多个值做对比,匹配到哪个执行哪个 case。

核心结构:
switch(变量)——要判断的值
case 值:——匹配就执行
break;——不写会穿透继续执行下一个 case
default:——都不匹配时执行

坑:忘记写 break 导致穿透、case 用 === 严格比较、default 位置不影响执行顺序

11.1 互动演示

选择角色:
选角色点按钮,再点穿透演示。

11.2 知识点逐条讲解(配合代码)

switch:拿一个值去"对号入座"

// 要判断的那个值
let role = "admin";

// 把它放进去
switch (role) {
  // 如果它 === "admin"
  case "admin":
    console.log("拥有全部功能权限");
    // 一定要停下来,不然会继续往下跑
    break;

  case "editor":
    console.log("仅拥有编辑权限");
    break;

  case "visitor":
    console.log("仅拥有浏览权限");
    break;

  // 以上都没对上,就走这里(相当于 else)
  default:
    console.log("未知用户角色");
}

② 漏 break:会"穿透"一路往下跑

switch 有个臭毛病:一旦对上某个 case,如果你忘了写 break,它不会停,会接着把后面 case 的代码也全跑一遍,直到遇到 break 或结束。这叫"穿透"。

如果你给 admin 写完代码忘了加 break,那么选 admin 时会把 admin、editor、visitor 的权限全都打印出来——权限越界就是这么来的。所以每个 case 末尾都老老实实写 break

default 是兜底:所有 case 都没对上时才走它,相当于 if...else 最后的 else。习惯放最后,也最好带个 break

实战:用在哪 / 常见坑 / 怎么解决

① 可能在什么地方用:不同角色显示不同菜单;按星期几做不同的事。

② 常见的问题:漏写 break 发生穿透,一个角色把所有菜单全显示出来了。

③ 解决思路:每个 case 写完立刻补 break;想合并几种情况共用代码时,才故意省掉中间的 break

一句话记住:"等于哪个固定值"用 switch(=== 比较),"在哪个区间"用 if;每个 case 末尾必须 break,否则穿透;default 兜底

本页重点

API作用参数返回值代码示例
switch...case按表达式的值找分支表达式匹配到的 case 分支let role = "admin";
switch (role) {
case "admin": console.log("管理员"); break;
}
break跳出 switch(不写会往下穿透)for (let i = 1; i <= 5; i++) {
if (i === 3) break;
console.log(i);
}
default都没匹配到时兜底let role = "x";
switch (role) {
default: console.log("未知");
}