为何switch(false)始终匹配第一个case?求解JavaScript switch逻辑
JavaScript中switch(false)的行为解析
先明确switch语句的核心逻辑:switch后面的表达式会先计算出一个值,然后依次和每个case后面的表达式计算结果做严格相等(===)比较,找到第一个匹配的case就执行对应的代码,直到遇到break或者switch语句结束。
回到你的代码:
let grade = 65; switch(false){ case grade >= 90: // 这里计算的结果是 65 >= 90 → false console.log(grade); console.log("You did great!"); break; case grade >= 80: // 65 >=80 → false,但第一个case已经匹配并break了,所以不会走到这 console.log("You did good!"); break; default: console.log(grade, "is not a letter grade!"); }
你觉得不会命中任何case的误区在于,误以为switch(false)是要case的条件为true才会匹配,但实际上是要case表达式的结果和switch的表达式结果严格相等。这里第一个case的计算结果就是false,和switch(false)的false全等,所以直接命中第一个case,执行完代码后break跳出,自然不会走到后面的case或default。
如果把grade改成95,第一个case的结果是true,和switch(false)的false不全等;第二个case结果也是true,同样不等,最后才会走到default。
另外注意你的代码最后缺少一个闭合的},不过这不是导致当前问题的原因。
内容的提问来源于stack exchange,提问作者lem lem
相关产品推荐
相关产品推荐

