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

switch语句无break时为何默认执行最后case?

为什么不带break的switch语句会执行最后一个case?

这是因为switch语句的**贯穿(fall-through)**特性:当switch匹配到第一个符合条件的case后,会从该case开始,依次执行后续所有case里的代码,直到遇到break语句或者整个switch块结束。

拿你的代码举例:当输入字符串的首字符是'a'时,程序会匹配到第一个case分支,执行letter = 'A'。但因为这个分支末尾没有break,程序不会停止,会继续往下走:

  • 进入第二个case分支,把letter改成'B';
  • 同样没有break,继续进入第三个case分支,改成'C';
  • 最后进入第四个case分支,改成'D';
  • 直到switch块结束,最终返回的就是'D'。

只有在每个case分支末尾添加break,才能让程序在执行完当前分支后立即退出switch块,得到你预期的结果。修正后的代码如下:

function getLetter(s) {
    let letter;
    console.log(s[0])
    switch (s[0]){
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
          letter = 'A';
          break; // 执行完后退出switch
        case 'b':
        case 'c':
        case 'd':
        case 'f':
        case 'g':
           letter = 'B';
           break;
        case 'h':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
            letter = 'C';
            break;
        case 'n':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'v':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
            letter ='D';  
            break;
        }  
  return letter;
}
console.log(getLetter('abcj')); // 现在返回预期的'A'

这种贯穿特性并非bug,而是设计时的功能——当你需要多个case执行同一段代码时,可以故意不写break。但大多数场景下,都需要添加break来避免意外执行后续分支的代码。

内容的提问来源于stack exchange,提问作者Giselle Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:25:44