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
相关产品推荐
相关产品推荐

