奇怪的if条件执行

时间:2019-06-06 09:30:49

标签: javascript if-statement

其他条件每次都执行。如果输入为“ 11”,答案为“ f”而不是“ D”,我知道最后一个条件应该是其他情况,但根据输入的逻辑,输出应为“ D”

function getGrade(score) {
let grade;
var score1 = Number(score);
// Write your code here
if (score1 > 25 && score <= 30)
grade = "A";
else if (score1 > 20 && score <= 25)
grade = "B";  
else if (score1 > 15 && score <= 20)
grade = "C";
else if (score1 > 10 && score <= 15)
grade = "D";      
else if (score1 > 5 && score <= 10)
grade = "E";
else  (score1 > 0 && score <= 5)
grade = "F";
return grade;
}

3 个答案:

答案 0 :(得分:3)

它是复制粘贴吗?那是一个错字问题。

else  (score1 > 0 && score <= 5)
grade = "F";

if在这里丢失。因此,(score1 > 0 && score <= 5)被解释为要做的事情(因此,对一个表达式求值),并且下一行在任何else / if分支之外,并且总是总是被执行。

答案 1 :(得分:1)

您可以在else if周围使用括号。同样,对于最后一个条件,您可以简单地使用else代替else if

function getGrade(score) {
  let grade;
  var score1 = Number(score);
  console.log(score1)
  // Write your code here
  if (score1 > 25 && score <= 30) {
    grade = "A";
  } else if (score1 > 20 && score <= 25) {
    grade = "B";
  } else if (score1 > 15 && score <= 20) {
    grade = "C";
  } else if (score1 > 10 && score <= 15) {
    grade = "D";
  } else if (score1 > 5 && score <= 10) {
    grade = "E";
  } else {
    grade = "F";
  }
  return grade;
}

console.log(getGrade(11))

答案 2 :(得分:1)

一种更好的方法是使用early exit paradigm,从错误的值开始,然后采用取决于之前条件的条件阶梯。

function getGrade(score) {
    var score1 = Number(score);

    if (isNaN(score1) || score1 > 30 || score1 < 0) return;
    if (score1 > 25) return "A";
    if (score1 > 20) return "B";
    if (score1 > 15) return "C";
    if (score1 > 10) return "D";
    if (score1 > 5) return "E";
    return "F";
}