switch 就是等值匹配,一个变量跟多个值做对比,匹配到哪个执行哪个 case。
核心结构:
① switch(变量)——要判断的值
② case 值:——匹配就执行
③ break;——不写会穿透继续执行下一个 case
④ default:——都不匹配时执行
坑:忘记写 break 导致穿透、case 用 === 严格比较、default 位置不影响执行顺序。
// 要判断的那个值
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("未知用户角色");
}
switch 有个臭毛病:一旦对上某个 case,如果你忘了写 break,它不会停,会接着把后面 case 的代码也全跑一遍,直到遇到 break 或结束。这叫"穿透"。
如果你给 admin 写完代码忘了加 break,那么选 admin 时会把 admin、editor、visitor 的权限全都打印出来——权限越界就是这么来的。所以每个 case 末尾都老老实实写 break。
default 是兜底:所有 case 都没对上时才走它,相当于 if...else 最后的 else。习惯放最后,也最好带个 break。
① 可能在什么地方用:不同角色显示不同菜单;按星期几做不同的事。
② 常见的问题:漏写 break 发生穿透,一个角色把所有菜单全显示出来了。
③ 解决思路:每个 case 写完立刻补 break;想合并几种情况共用代码时,才故意省掉中间的 break。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| switch...case | 按表达式的值找分支 | 表达式 | 匹配到的 case 分支 | let role = "admin"; |
| break | 跳出 switch(不写会往下穿透) | — | — | for (let i = 1; i <= 5; i++) { |
| default | 都没匹配到时兜底 | — | — | let role = "x"; |