function getRankForScore(score){
if(score <= 20) return 1;
else if(21 < score <=40) return 2;
else if(41 < score <=60) return 3;
else if(61 < score <=90) return 4;
else return 5;
}
getRankForScore(10)
//返回1
,预期
getRankForScore(22)
//返回2
,预期
但是
getRankForScore(50 or any number > 21)
//返回2
。
我如何使用switch case构造来进行不等式检查? 上述功能有什么问题?
答案 0 :(得分:7)
因为
当您输入大于21的数字时,条件21 < score
的计算结果为真,并返回1,然后将其与40进行比较,显然小于40
答案 1 :(得分:4)
你的语法是错误的,如果是:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score <= 40) return 2;
else if(score <= 60) return 3;
else if(score <= 90) return 4;
else return 5;
}
答案 2 :(得分:3)
function getRankForScore(score){
return score <= 20 && 1 || score <=40 && 2 ||
score <= 60 && 3 || score <=90 && 4 || 5;
}
答案 3 :(得分:2)
a < b < c
不是您所期望的,它被解释为(a < b) < c
,它变为(例如)true < c
。
答案 4 :(得分:1)
function getRankForScore(score) {
var result;
switch(true) {
case score <= 20:
result = 1;
break;
case score > 21 && score <= 40:
result = 2;
break;
case score > 41 && score <= 60:
result = 3;
break;
case score > 61 && score <= 90:
result = 4;
break;
default:
result = 5;
}
return result;
}
答案 5 :(得分:0)
为什么不使用以下代码:
function getRankForScore(score) {
if(score <= 20) {
return 1;
} else if(score > 21 && score <= 40) {
return 2;
} else if(score > 41 && score <= 60) {
return 3;
} else if(score > 61 && score <= 90) {
return 4;
} else {
return 5;
}
}
答案 6 :(得分:0)
尝试这种方式:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score >21 && score <=40) return 2;
else if(score > 41 && score <=60) return 3;
else if(score> 61 && score <=90) return 4;
else return 5;
}
表达式if (a < b < c)
不是leagal。
答案 7 :(得分:0)
这就是原因:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score > 21 && score <= 40) return 2;
else if(score > 41 && score <= 60) return 3;
else if(score > 62 && score <= 80) return 4;
else return 5;
}
alert(getRankForScore(42));
Javascript有时候不是数学:(
你不能做21&lt;得分&lt; = 40,你必须使用&amp;&amp;言。
在这里工作小提琴:http://jsfiddle.net/BaJse/
答案 8 :(得分:0)
我认为当你写这样的东西时:
if(21 < score <=40)
它实际上等于:
if (21 < score || score <= 40)
符合你的条件。任何大于21的数字 - 这就是为什么它不会继续检查你的其他if语句。
你应该做一个AND声明:
if (21 < score && score <= 40)