javascript 为什么switch false总是返回第一个case?

bhmjp9jg  于 2023-01-04  发布在  Java
关注(0)|答案(4)|浏览(228)

我试图理解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),我预计没有一个案例得到满足,并且不应该打印控制台日志。

hwazgwia

hwazgwia1#

swtichcase中的表达式与传递给switch的值进行比较。
(grade >= 90) === false
我强烈建议在case s中只使用简单的值,对于像这里这样的更复杂的逻辑,使用if/else

o7jaxewo

o7jaxewo2#

因为双重否定,所以需要检查表达式的反义词。

switch (false) {
    case !(grade >= 90): // code
}

对比

switch (true) {
    case grade >= 90: // code
}
fdx2calv

fdx2calv3#

来自MDN:
switch语句计算表达式,将表达式的值与一系列case子句进行匹配,然后在第一个具有匹配值的case子句之后执行语句,直到遇到break语句。如果没有case与表达式的值匹配,则将跳转到switch语句的default子句。
更多详情请点击此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch

hts6caw3

hts6caw34#

这是因为,它将传递的值(false)与case等式进行比较(在第一个case中也是false),所以false === falsetrue(是的,它是===,而不是==),所以它进入第一个case。

相关问题