切换大小写未显示正确的结果

Mar*_*ini 2 javascript switch-statement

这是我的脚本

var marks = 11;
switch (marks) {
  case (marks < 20):
    console.log('Yes Freaking Failed');
    break;
  case (marks > 20):
    console.log('Ahh Its Ok');
    break;
  case (marks > 80):
    console.log('Whooping');
    break;
  default:
    console.log('Cant say u maybe Flunked');
    break;
}
Run Code Online (Sandbox Code Playgroud)

我认为它应该显示,'Yes Freaking Failed'因为分数小于 20。但它显示'Cant say u maybe Flunked'

这是为什么?

Bar*_*mar 5

当你写的时候

switch (x) {
case(y):
    ...
}
Run Code Online (Sandbox Code Playgroud)

相当于测试

if (x == y) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以

case (marks < 20):
Run Code Online (Sandbox Code Playgroud)

方法:

if (marks == (marks < 20)) {
Run Code Online (Sandbox Code Playgroud)

您不能用于case这样的范围测试,您需要使用一系列if/else if

if (marks < 20) {
    console.log('Yes Freaking Failed');
} else if (marks < 80) {
    console.log('Ahh Its OK');
} else {
    console.log('Whooping');
}
Run Code Online (Sandbox Code Playgroud)

另请注意,如果它按照您想象的方式工作,它永远不会执行marks > 80,因为它也会匹配marks > 20,并且始终执行第一个匹配的情况。

这个案子没有必要Cant say u maybe flunked,因为没有其他的可能性。