我是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..
为什么会这样?请告诉我我在哪里做错了。谢谢。
答案 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。 所以你应该做,如果在你的情况下,你应该做。