首页 > 解决方案 > JavaScript If-else range check in 相反不起作用

问题描述

谁能解释一下这段代码背后的逻辑?

function getGrade(score) {
    let grade;
    if (20 < score <= 30) {
      grade = "A";
    } else if (10 < score <= 20) {
      grade = "B";
    } else if (0 < score <= 10) {
      grade = "C";
    }
    return grade;
  }

  console.log(getGrade(15));    //'A'
  console.log(getGrade(4));     //'A'
  console.log(getGrade(20));    //'A'

使用&&运算符 inif-else或使用相反的 as:可以正常工作30>= score > 25。提前致谢。

标签: javascriptif-statementconditional-statements

解决方案


20 < score <= 30由于在 Javascript 中使用多个运算符时如何工作,表达式始终评估为 true,请在此处查看更多信息: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

发生的事情是首先被20 < score评估,这是true(1)或false(0)。如果小于或等于 30,则比较该值。由于该值始终为 1 或 0,因此始终小于 30,因此整个表达式作为一个整体始终为真。

自己试试这些线,看看它是如何工作的。:)

score = 10;
b = 20 < score; // false
c = b <= 30; // always outputs true

// Also try
d = true <= 30; // true
e = false <= 30; // true

你应该在这里做的是,在你写的时候,使用 &&-operators 代替:

if (20 < score && score <= 30) {
    grade = "A";
}

推荐阅读