防止 switch-case 漏写 break 的关键是建立可验证习惯:启用 ESLint no-fallthrough 规则、默认每个 case 显式终结、优先用 return 或 break、default 不为空、善用对象映射替代 switch。

防止 switch-case 漏写 break 导致贯穿(fall-through),关键不是靠记忆,而是建立可验证、可约束的编码习惯。JS 的 switch 默认穿透,不写 break 就会顺序执行后续所有 case,哪怕逻辑完全无关——这在多数业务场景中是 Bug,不是特性。
用 ESLint 自动拦截未终结的 case
启用 ESLint 的 no-fallthrough 规则,它会在保存时实时报错:任何没有 break、return、throw 或 continue 的非空 case 都会被标红。
- 配置示例:
"no-fallthrough": ["error", { "commentPattern": "fall\s*through" }] - 有意穿透时,必须写紧邻的注释:
case 'a': doA(); // fall through - VS Code + ESLint 插件可实现编辑时即时反馈,比人工 review 快得多
把每个 case 当作必须收尾的独立单元
心理上预设“每个 case 块末尾必须有出口语句”,而不是纠结“要不要 break”。函数内优先用 return,简洁且天然阻断穿透;非函数作用域统一用 break。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 含逻辑的 case,哪怕只有一行,也显式写
break;空 case 不推荐留空,可写break或throw new Error('unhandled') - 避免 case 后直接跟
if或循环——这类嵌套容易让人忽略块末是否已终结 - default 不应为空;即使暂无处理逻辑,也建议写
default: throw new Error('unexpected value: ' + value);
用对象映射或 Map 替代纯值匹配的 switch
当 switch 只用于根据某个值返回结果、调用函数或设置状态(不依赖穿透逻辑),改用查找表更安全、更易扩展,彻底绕过 break 问题。
- 基础映射:
const handlers = { save: saveFn, delete: deleteFn };→handlers[action]?.() - 支持默认行为:
(handlers[action] ?? defaultFn)() - TypeScript 下类型推导清晰,新增分支只需加键值对,无顺序和 break 风险
人工审查时聚焦两个信号点
代码走查不必通读逻辑,快速滚动扫描即可:
- 每个
case块最后一行是不是break、return、throw?还是直接闭合了花括号? -
default是否存在?是否为空?是否在最后?如果不在最后,它后面有没有break?

















