Javascript表达式:大于x和大于y的两倍

Javascript表达式:大于x和大于y的两倍,javascript,boolean-logic,boolean-expression,Javascript,Boolean Logic,Boolean Expression,所以我想知道是否有一种方法可以做一个双大于,像这样: if(x > y > z) { ... } if(gt(x, y, z)) { ... } 然后我看到了这个 但后来我在控制台中尝试了以下表达式,得到了一个奇怪的结果: (5 < 2 < 1) // returned true (5 > 2 > 1) // returned false (51)//返回false 怎么做 更新:我知道你不能这么做“(x>y>z)”,只是想解释一下奇怪的结果。不。你

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

if(x > y > z) { ... }
if(gt(x, y, z)) { ... }
然后我看到了这个

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

(5 < 2 < 1) // returned true
(5 > 2 > 1) // returned false
(5<2<1)//返回true
(5>2>1)//返回false
怎么做


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

不。你不能用JavaScript来做这件事。尽管它非常有用,但您仍然需要使用
x>y&&y>z

也就是说,为了解释你的结果:

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

您需要两个独立的条件,例如
5if((5>2)和&(2>1))我会试试{
}不确定为什么另一种方法不起作用,但因此实现应该是以另一种方法编写的代码的适当替代品。

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

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

只需使用
x>y&&y>z
。您期望得到什么结果?JavaScript从左到右读取,使您的代码实际上:
(5<2)<1
,这将变成
false<1
,并将其转换为
0<1
if(gt(x, y, z)) { ... }