基本的javascript,如果给出意想不到的输出多个其他

时间:2013-09-09 07:53:43

标签: javascript

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构造来进行不等式检查? 上述功能有什么问题?

9 个答案:

答案 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)

您可以使用short circuit evaluation

在此处使用oneliner
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)