JavaScript中switch(age)无输出switch(true)正常是何原因?
问题成因
JavaScript 的 switch 语句使用**严格相等(===)**做分支匹配:程序会先算出 switch() 括号里的值,再依次和每个 case 后表达式的返回值做严格相等比对,只有比对结果为 true 时才会执行对应分支的代码;如果所有分支都不匹配,又没写 default 兜底分支,switch 块里的代码就一行都不会跑。
你写的 switch(age) 版本没有输出,执行逻辑是这样的:
- 变量
age赋值为18,所以 switch 用来做匹配的基准值是数字类型的18 - 第一个 case 后面的表达式是
age > 18,比较运算的返回值是布尔值false,18 === false结果为false,匹配失败 - 第二个 case 后面的表达式是
age < 18,比较运算的返回值也是布尔值false,18 === false结果还是false,匹配失败 - 代码里没写
default分支,没有任何分支命中,自然不会有打印内容。
为什么 switch(true) 写法能正常运行
把 switch 的传入值改成 true 之后,匹配基准值就变成了布尔类型的 true。这时候程序会挨个计算每个 case 后比较表达式的结果,哪个表达式返回 true,就能和基准值严格相等,命中对应分支:
- 当 age 大于 18 时,
age>18返回true,命中第一个分支,打印可投票的提示 - 当 age 小于 18 时,
age<18返回true,命中第二个分支,打印不可投票的提示
补充:你现在给的
age=18刚好不满足两个 case 的判断条件,就算换成switch(true)写法,同样不会命中任何分支,需要补充age === 18的对应分支或者default分支,才能覆盖这个边界场景。
问题对应的原始代码如下:
let age=18; switch(age){ case age>18: console.log("you can vote"); break; case age<18: console.log("you cannot vote"); break; }
内容的提问来源于stack exchange,提问作者Rajkumar
相关产品推荐
相关产品推荐

