Javascript表达式:double大于x且大于y

时间:2014-03-08 22:42:23

标签: javascript boolean-logic boolean-expression

所以我想知道是否有办法做一个比这更大的双倍:

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

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

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

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

如何?

更新:我知道你不能这样做“(x&gt; y&gt; z)”,只是想要解释这个奇怪的结果。

4 个答案:

答案 0 :(得分:6)

您需要两个单独的条件,例如5<2 && 2<1,以便执行您所需的操作。如果没有两个条件,则将第一个条件的结果与第二个条件的右侧进行比较。

为什么?

对于无法解释的行为,我相信为什么它返回它返回的原因的解释是javascript在数值运算中使用时处理布尔值(等等)的方式,换句话说,javascript将将你的布尔值转换为0或1,这里有一些例子,例如this one,例如{{3}},你可以做+false并获得0。

(5 < 2 < 1)true因为:

  
      首先解析
  • 5<2,然后返回false
  •   
  • false被转换为数字,返回0
  •   
  • 0<1将返回true
  •   

(5 > 2 > 1)false因为:

  
      首先解析
  • 5>2,将返回true
  •   
  • true被转换为数字,将返回1
  •   
  • 1>1将返回false
  •   

答案 1 :(得分:3)

没有。你不能用JavaScript做到这一点。尽管它很有用,但你仍然坚持使用x > y && y > 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

答案 2 :(得分:1)

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

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)) { ... }

答案 3 :(得分:0)

我会尝试if((5&gt; 2)&amp;&amp;(2&gt; 1)){ 不确定为什么另一个没有用,但因此实现应该是代码的正确替代品,可以用你拥有的其他方式编写。