【问题标题】:Why is my comparison not producing the expected result?为什么我的比较没有产生预期的结果?
【发布时间】:2020-09-23 22:07:41
【问题描述】:

我希望这会输出“失败”,但它会输出“优秀”,即使正在比较的值与该比较不匹配。

我的代码有什么问题?

let grade = 99;
if(140 <= grade <= 150) {
  console.log('Excellent');
}
else if(100 <= grade) {
  console.log('Very Good');
}
else if(grade < 100) {
  console.log('Failed');
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请注意,“它不能正常工作”不是一个好的解释。为什么它不起作用?你想要的输出是什么?
  • if (grade &gt;= 140) {console.log('Excellent');} else if (grade &gt;=100) {console.log('Very Good');} else {console.log('Failed');}
  • @WaisKamal 我认为这是一个合理的第一篇文章。我们知道它应该做什么,即输出“失败”,并且已经被一些人理解并(正确地)回答了。
  • @mrblewog 实际上我只是浏览了文本并没有找到所需的行为。是的,这里很清楚结果应该是什么,但是对于 OP 来说,最好记住说明未来帖子的期望行为。

标签: javascript if-statement


【解决方案1】:

这不是多重比较的方式:

if (140 <= grade <= 150)

在这种情况下,前半部分将评估为 truefalse,其余部分将类似于 true &lt;= 150,这没什么意义。

相反,与其从直觉的角度来考虑它,不如从组合逻辑运算的角度来考虑它。您想要的两个操作是:

  • 140 &lt;= grade
  • grade &lt;= 150

将它们与“and”运算符结合起来:

if (140 <= grade && grade <= 150)

结果:

let grade = 99;
if (140 <= grade && grade <= 150) {
  console.log('Excellent');
} else if(100 <= grade) {
  console.log('Very Good');
} else if(grade < 100) {
  console.log('Failed');
}

【讨论】:

  • 旁注:在比较 true &lt;= 150false &lt;= 150 时,true 的行为类似于 1false 的行为类似于 0。类似于true + 0 产生1false + 0 产生0true == 1true &gt; 0false == 0false &lt; 1 都会产生true
【解决方案2】:

如果您打算通过140 &lt;= grade &lt;= 150 检查成绩是否在 140 到 150 之间,那么您的做法是错误的。这将首先评估 140 &lt;= grade,它将返回零或一,然后将其与 150 进行比较(因此总是更小)。您需要使用两个单独的语句:

if(140 <= grade && grade <= 150) {
  ...
}

【讨论】:

    【解决方案3】:

    这样做。您需要将您在第一个 if 语句中提供的两个条件分开。

    let grade = 99;     
    if(140<= grade && grade <=150){
        console.log('Excellent');
      }
      else if(100<= grade){
        console.log('Very Good');
      }
      else if(grade < 100){
        console.log('Failed');
      }

    【讨论】:

      【解决方案4】:

      表达式140 &lt;= grade &lt;= 150 在数学形式上是正确的。在js中必须写成140 &lt;= grade &amp;&amp; grade &lt;=150

      【讨论】:

        猜你喜欢
        • 2022-11-20
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多