default 是 switch 语句中捕获所有未被 case 匹配值的兜底分支,位置灵活但建议置末尾;需显式 break 防穿透;处理运行时未覆盖值,承担异常上报、降级、报错等健壮性职责。

default 是 switch 语句中专门用于捕获所有未被 case 匹配到的情况的关键字,它不是可选的“补充说明”,而是兜底逻辑的正式入口。
default 必须放在 switch 内部,位置灵活但建议放末尾
default 可以出现在 switch 块中的任意位置(开头、中间、结尾),但为可读性和维护性考虑,通常放在最后。即使它写在第一个 case 前,执行时也只在前面所有 case 都不匹配时才进入。
示例:
switch (status) {
case 'success':
handleSuccess();
break;
case 'error':
handleError();
break;
default: // 所有其他值,比如 'pending'、'unknown'、null、undefined、42 等
handleUnknownStatus();
}
default 不依赖 break,但加 break 更安全
default 后面没有隐式 break;如果它后面还跟着其他 case 或 default(极少出现),会继续向下执行(即“穿透”)。所以只要 default 后不再需要执行后续分支,就应显式写 break。
动态切换AI模型以优化成本与性能。当用户发出“eco mode”、“balanced mode”、“smart mode”或“max mode”等模式指令,或使用“/modes status”查询状态及“/modes setup”配置模式时触发。
常见做法:
- 每个 case 和 default 后都加 break(最稳妥)
- 明确需要穿透时,用注释说明,例如
// fall through - default 后无其他分支,不加 break 也不会出错,但加了更统一、防误改
default 处理的是“运行时未覆盖的值”,不是类型检查
switch 比较使用的是严格相等(===),所以 default 会捕获:
- 值不等于任一 case 的字面量(如 status 是 'loading',而 case 只有 'success'/'error')
- 类型不一致的值(如 case 匹配字符串 '1',但传入数字 1)
- undefined、null、NaN、对象等无法被字符串/数字 case 覆盖的值
注意:它不会主动识别“非法输入”,只是被动兜底。若需校验,应在 switch 前做预处理,或在 default 中做防御性判断(如日志上报、抛错、降级)。
实际业务中 default 常见用途
别把 default 当作“随便写点”的占位符,它承担关键健壮性职责:
-
记录异常状态:上报监控,比如
reportUnexpectedStatus(status) - 提供安全降级:展示默认文案、空状态、加载中 UI
-
抛出明确错误:开发阶段快速暴露遗漏分支,如
throw new Error(`Unhandled status: ${status}`) - 静默忽略(慎用):仅适用于明确允许未知值且无需响应的场景










