【问题标题】:Javascript expression: double greater than x and greater than yJavascript 表达式:double 大于 x 和大于 y
【发布时间】:2014-03-08 22:42:22
【问题描述】:

所以我想知道是否有办法做一个双大于,像这样:

if(x > y > z) { ... }

然后我看到了这个 Expression for "more than x and less than y"?

但后来我在控制台中尝试了以下表达式,得到了一个奇怪的结果:

(5 < 2 < 1) // returned true
(5 > 2 > 1) // returned false

怎么做?

更新:我知道你不能这样做“(x > y > z)”,只是想解释一下奇怪的结果。

【问题讨论】:

  • 请使用x &gt; y &amp;&amp; y &gt; z
  • 您对此有何期待?
  • JavaScript 从左到右读取,使你的代码实际上是:(5 &lt; 2) &lt; 1,它会变成false &lt; 1,它会被翻译成0 &lt; 1

标签: javascript boolean-logic boolean-expression


【解决方案1】:

您需要 两个 单独的条件,例如 5&lt;2 &amp;&amp; 2&lt;1 才能完成您的任务。如果没有两个条件,则将第一个条件的结果与第二个条件的右侧进行比较。

为什么?

对于 unexplained 行为,我相信为什么它返回它返回的内容的解释是 javascript 在数值运算中使用时处理布尔值(除其他外)的方式,换句话说,javascript 将将你的布尔值转换为 0 或 1,这里的几个问题中有很多这样的例子,例如 this one,你可以做 +false 并得到一个 0。

(5 &lt; 2 &lt; 1)true 因为:

  • 5&lt;2 先解析,返回false
  • false 被转换为一个数字,返回 0
  • 0&lt;1 将返回 true

(5 &gt; 2 &gt; 1)false 因为:

  • 5&gt;2先解决,会返回true
  • true 被强制转换为数字,将返回 1
  • 1&gt;1 将返回 false

【讨论】:

    【解决方案2】:

    没有。你不能在 JavaScript 中做到这一点。尽管它很有用,但您仍然坚持使用 x &gt; y &amp;&amp; y &gt; z

    也就是说,解释一下你的结果:

    5 < 2 gives false
    false casts to 0
    0 < 1 is true
    

    还有:

    5 > 2 gives true
    true casts to 1
    1 > 1 is false
    

    【讨论】:

      【解决方案3】:

      至于“双倍大于的方法”,您可以定义一个函数:

      function gt () {
          var prev = arguments[0];
          return !([].slice.call(arguments, 1).some(function (arg) {
              var ret = prev <= arg;
              prev = arg;
              return ret;
          }));
      }
      

      ...然后像这样调用:

      if(gt(x, y, z)) { ... }
      

      【讨论】:

        【解决方案4】:

        我会试试 if((5>2) && (2>1)) { 不知道为什么另一个没有工作,但因此实现应该是可以用其他方式编写的代码的适当替代品。

        【讨论】:

          猜你喜欢
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-24
          • 2012-09-28
          相关资源
          最近更新 更多