Switch Case未显示正确的结果

时间:2015-05-01 02:22:09

标签: javascript

我是javascript的新手。 这是我的剧本

        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.但它显示can't say..为什么会这样?请告诉我我在哪里做错了。谢谢。

4 个答案:

答案 0 :(得分:3)

写作时

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案例,因为没有其他可能性。

答案 1 :(得分:1)

从技术上说,这是不可能的。 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;
    }

答案 2 :(得分:1)

您的代码相当于:

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

答案 3 :(得分:0)

使用switch语句时,您正在评估标记并将标记的值与案例进行比较。并且您有以下情况:1,0,0,默认。这是因为(标记<20)评估为真,即1,其他两个是假,即0。 所以你应该做,如果在你的情况下,你应该做。