我试图理解switch
在处理false
时的行为。
let grade = 65;
switch(false){
case grade >= 90:
console.log(grade);
console.log("You did great!");
break;
case grade >= 80:
console.log("You did good!");
break;
default:
console.log(grade, "is not a letter grade!");
我不明白为什么在上面的代码中,grade总是命中第一个case
由于switch(false)
,我预计没有一个案例得到满足,并且不应该打印控制台日志。
4条答案
按热度按时间hwazgwia1#
swtich
将case
中的表达式与传递给switch
的值进行比较。(grade >= 90) === false
我强烈建议在
case
s中只使用简单的值,对于像这里这样的更复杂的逻辑,使用if
/else
。o7jaxewo2#
因为双重否定,所以需要检查表达式的反义词。
对比
fdx2calv3#
来自MDN:
switch
语句计算表达式,将表达式的值与一系列case
子句进行匹配,然后在第一个具有匹配值的case
子句之后执行语句,直到遇到break
语句。如果没有case
与表达式的值匹配,则将跳转到switch
语句的default
子句。更多详情请点击此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
hts6caw34#
这是因为,它将传递的值(
false
)与case等式进行比较(在第一个case中也是false
),所以false === false
是true
(是的,它是===
,而不是==
),所以它进入第一个case。