Switch Case 未显示正确的结果

Switch Case not showing correct results

这是我的脚本

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;
}

我认为它应该显示'Yes Freaking Failed'因为标记少于20。但它显示'Cant say u maybe Flunked'

这是为什么?

当您使用 switch 语句时,您正在评估标记并将标记的值与案例进行比较。并且您有以下情况:1、0、0、默认值。这是因为 (marks<20) 计算结果为 true,即 1,而其他两个为 false,即 0。 所以你应该做 if 和 else if 在你的情况下。

从技术上讲这是不可能的。 Javascript 做到了。

如果需要比较,用if/else if/else.

开关盒适用于您知道您将拥有特定值的情况。

var marks=11;
    switch(marks){
        case (11):
        console.log('It would go in here');
        break;
        case (42):
        console.log('If equal to 42');
        break;
        case (80):
        console.log('if equal to 80.');            
        break;

        default:
        console.log('Cant say u maybe Flunked');
        break;
    }

您的代码等同于:

var marks=11;
switch(marks){
    case (true):
    console.log('Yes Freaking Failed');
    break;
    case (false):
    console.log('Ahh Its Ok');
    break;
    case (false):
    console.log('Whooping');    
    break;          
    default:
    console.log('Cant say u maybe Flunked');
    break;
}

marks 不是 true 也不是 false - 所以 switch 转到 default.

写的时候

switch (x) {
case(y):
    ...
}

相当于测试

if (x == y) {
    ...
}

所以

case (marks < 20):

表示:

if (marks == (marks < 20)) {

您不能使用 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');
}

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

不需要 Cant say u maybe flunked 的情况,因为没有其他的可能性。