TypeScript字符串类型Switch-case未按预期执行原因咨询
为什么我的Switch-Case会执行不匹配的Case逻辑?
这其实是JavaScript(包括TypeScript)里switch语句的**贯穿(fall-through)**特性导致的,算是新手刚接触switch时很容易踩的一个坑。
简单来说,switch语句的工作逻辑是:
- 先找到第一个和表达式匹配的case分支
- 从这个匹配的分支开始,依次执行后续所有的case和default代码,直到遇到
break、return语句,或者整个switch代码块结束
回到你的代码:
let ca: string = "2"; switch (ca) { case "2": console.log("2"); case "1": console.log("1"); default: console.log("default"); }
当ca等于"2"时,switch找到了匹配的case "2",执行完console.log("2")后,因为这个分支后面没有break语句,程序不会跳出switch块,而是继续往下执行case "1"的代码,接着再执行default的代码,所以最终输出了2 1 default。
这种贯穿特性并不是设计缺陷——它其实是为了方便多个case共享同一段逻辑,比如:
switch (day) { case "周六": case "周日": console.log("休息日"); break; default: console.log("工作日"); }
这里周六和周日的逻辑相同,就可以利用贯穿特性省略重复代码。但如果每个case需要独立执行,就必须在每个case分支末尾加上break,这样才能达到你预期的只执行匹配分支和default的效果。
内容的提问来源于stack exchange,提问作者samisaviv
相关产品推荐
相关产品推荐

