基本的JavaScript,如果给出意外的输出,则有多个其他

basic javascript , multiple else if giving unexpected output

本文关键字:其他 输出 JavaScript 如果 意外      更新时间:2023-09-26
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 .

如何使用开关大小写结构进行不等式检查之类的事情?上述功能有什么问题?

因为

当您输入大于 21 的数字时,条件21 < score计算结果为 true 并返回 1,然后与 40 进行比较,这显然小于 40

如果以下情况下,您的语法在 else 中是错误的:

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

您可以在此处使用单行,使用短路评估:

function getRankForScore(score){
 return score <= 20 && 1 || score <=40 && 2 || 
        score <= 60 && 3 || score <=90 && 4 || 5;
}
a < b < c不是

你所期望的,它被解释为(a < b) < c变成(例如)true < c

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

为什么不使用这样的代码:

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

试试这个方式:

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)的表达不是利格的。

这就是为什么:

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 <分数><= 40,你必须使用 && 语句。

在这里工作小提琴:http://jsfiddle.net/BaJse/

我认为

当你写这样的东西时:

if(21 < score <=40)

它实际上等于:

if (21 < score || score <= 40)

适合您的条件。 任何大于 21 的数字 - 这就是为什么它不会继续检查您的其他 if 语句的原因。

你应该做一个 AND 语句:

if (21 < score && score <= 40)