You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中switch的非默认最后case会执行?

无break的switch语句为何会执行后续分支?

你的代码示例:

const foo = figureOutWhatFooIs()
console.log(foo) // 'bar'

switch (foo) {
  case 'bar':
    console.log('foo = bar')
  case 'baz':
    console.log('foo = baz')
}

当foo的值为'bar'时,case 'baz'的代码也会执行,核心原因是switch语句的默认贯穿(fall-through)特性:

  • switch会从上到下匹配case条件,找到第一个匹配的case后,会从该位置开始依次执行所有后续的case代码、甚至default代码,直到遇到break、return语句,或者整个switch代码块结束。
  • 你这段代码里,case 'bar'没有写break,所以执行完console.log('foo = bar')后,程序不会跳出switch,而是继续向下执行case 'baz'的代码,直到switch块结束。

如果想避免这种情况,只需在每个需要终止的case后添加break语句,同时建议加上default分支处理未匹配的情况:

const foo = figureOutWhatFooIs()
console.log(foo) // 'bar'

switch (foo) {
  case 'bar':
    console.log('foo = bar')
    break; // 终止贯穿,不再执行后续分支
  case 'baz':
    console.log('foo = baz')
    break;
  default:
    console.log('foo 是其他值')
    break;
}

当然,贯穿特性也可以被刻意利用——比如多个case需要执行相同逻辑时,可以省略中间case的break,此时建议添加注释说明意图,避免被误判为代码疏漏。

内容的提问来源于stack exchange,提问作者Aaron Parisi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:32