所以我想知道是否有办法做一个比这更大的双倍:
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)”,只是想要解释这个奇怪的结果。
答案 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)){ 不确定为什么另一个没有用,但因此实现应该是代码的正确替代品,可以用你拥有的其他方式编写。