【问题标题】:Why does greater than behave like this in Javascript? [duplicate]为什么大于在 Javascript 中的行为是这样的? [复制]
【发布时间】:2017-04-03 10:50:44
【问题描述】:

我正在查看 Javascript 中的比较运算符并遇到以下示例:

console.log(1 < 2 < 3);

这等于 true,感觉就像 1 小于、2 和 2 小于 3...

console.log(3 > 2 > 1);

但是这等于 false,我不明白...

这里有一个jsFiddle,如果您打开 Web 开发人员工具并查看控制台,也会显示该行为。

有人建议,它与优先级有关,但阅读有关 precedence at MDN 的信息,我找不到对此的解释。

谁能用合理简单的方式解释一下,那里发生了什么?

【问题讨论】:

  • 您是否希望1 &lt; 2 &lt; 3 实际上像数学一样工作,或者您是否理解它确实实际上像常规数学符号那样工作......?
  • 只是澄清一下,为什么你认为这是有道理的?
  • 我实际上并不知道它在数学中是如何工作的,所以你的问题没有@deceze lol
  • @OliverCharlesworth 这似乎是有道理的,因为 1 小于、2 和 2 小于 3,但开始意识到,这不是它的工作原理......

标签: javascript comparison-operators


【解决方案1】:

一个想法

1

3>2>1 = (3>2)>1 = (真)>1 = (1)>1 = 假

【讨论】:

    【解决方案2】:

    javascript中的1 &lt; 2 &lt; 3对应((1 &lt; 2) &lt; 3),即对应true &lt; 3。您实际上是在将布尔值与整数进行比较,我认为这没有任何意义。

    如果你想同时进行两个比较,你应该将条件重写为3 &gt; 2 &amp;&amp; 2 &gt; 1

    【讨论】:

      【解决方案3】:

      在 JavaScript 中,比较运算符的链接不起作用;它将首先将第一次比较评估为真/假,将其转换为 1/0,然后进行第二次比较:

      1 < 2 < 3   =>   (1 < 2) < 3
                  =>      true < 3
                  =>         1 < 3
                  =>          true    
      
      3 > 2 > 1   =>   (3 > 2) > 1
                  =>      true > 1
                  =>         1 > 1
                  =>         false
      

      您应该将其拆分为两个单独的比较:1 &lt; 2 &amp;&amp; 2 &lt; 3

      【讨论】:

        【解决方案4】:

        您误解了它的工作原理。如果你写3 &gt; 2 &gt; 1,第一个操作实际上是3 &gt; 2,它显然返回true。但随后是 true &gt; 1 返回 false,因为 true 正在被数学运算符更改为 1

        1 &lt; 2 &lt; 3 示例中,它返回true,因为1 &lt; 2 返回truetrue &lt; 3 操作也返回true,因为true 再次被更改为11明显小于3

        【讨论】:

          【解决方案5】:
          console.log(1 < 2 < 3); 
          

          按以下方式评估:

          console.log(true &lt; 3);console.log(1 &lt; 3); 打印true

          然后console.log(3 &gt; 2 &gt; 1)

          按以下方式评估:

          console.log(true &gt; 1)console.log(1 &gt; 1) 打印false

          【讨论】:

            【解决方案6】:

            因为从左到右的操作的优先级,以及 true 等价于 (1)

            console.log(3 > 2 > 1);
            3 > 2 => true;
            console.log(true > 1 );
            1 > 1 => false;
            true > 1 => false;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-31
              • 1970-01-01
              • 2017-10-31
              • 1970-01-01
              • 2023-02-13
              • 1970-01-01
              相关资源
              最近更新 更多