【问题标题】:Javascript chained relational operators supported?支持 Javascript 链接的关系运算符吗?
【发布时间】:2018-05-16 20:54:11
【问题描述】:

我刚刚尝试了一些 JS 核心原则,发现引擎评估链式关系运算符而不会引发错误。相反,他们以我自己无法理解的方式进行评估。

console.log(1 < 2 < 3 < 4 < 5); //true, expected
console.log(5 > 4 > 3 > 2 > 1); //false, should be true
console.log(5 >= 4 >= 3);       //false, should be true
console.log(7 >= -2 >= 1);      //true, should be false
console.log(1 <= -2 <= 7);      //true, should be false

这甚至是官方支持的吗?我在文献/文档中也没有提到这方面的内容,我很困惑为什么这甚至可以工作。

有人可以点亮一下吗?

【问题讨论】:

  • 3 &gt; 2 &gt; 1 === true &gt; 1 === false.
  • 1 &lt; 2 &lt; 3 &lt; 4 &lt; 5 从左到右求值。 1 小于 2。是的。 true 小于 3,所以为 true。 true 也小于 4,所以 true。 true 也小于 5。如此真实。其余部分遵循相同的推理。
  • 参见:es5.github.io/#x11.8(或更高规格)

标签: javascript


【解决方案1】:

它们是二元运算符,具有左结合性。它们被解析为

console.log((((1 < 2) < 3) < 4) < 5); // true (true < 5)
console.log((((5 > 4) > 3) > 2) > 1); // false (true > 1)
console.log((5 >= 4) >= 3);           // false (true >= 3)
console.log((7 >= -2) >= 1);          // true (true >= 1)
console.log((1 <= -2) <= 7);          // true (false <= 7)

并将布尔部分结果与数字进行比较。

【讨论】:

    【解决方案2】:

    1 &lt; 2 计算结果为 true

    true &lt; 3 计算结果为 true

    true &lt; 4 计算结果为 true

    true &lt; 5 计算结果为 true


    5 &gt; 4 计算结果为 true

    true &gt; 3 计算结果为 false

    false &gt; 2 计算结果为 false

    false &gt; 1 计算结果为 false


    这种逻辑的原因是truefalse 在这些比较中分别被视为10

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2020-10-15
      • 2016-01-15
      • 1970-01-01
      相关资源
      最近更新 更多