我在jsfiddle.net上玩,我很好奇为什么这个返回真?
if(0 < 5 < 3) {
alert("True");
}
这个也一样:
if(0 < 5 < 2) {
alert("True");
}
但这不是:
if(0 < 5 < 1) {
alert("True");
}
这种怪癖有用吗?
我在jsfiddle.net上玩,我很好奇为什么这个返回真?
if(0 < 5 < 3) {
alert("True");
}
这个也一样:
if(0 < 5 < 2) {
alert("True");
}
但这不是:
if(0 < 5 < 1) {
alert("True");
}
这种怪癖有用吗?
当前回答
除了python, CoffeeScript是另一种支持链式比较的语言,因此在vanilla JS中3 < x < 10将被转换为(3 < x && x < 10)
其他回答
0 < 5 < 3
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true
不久前,我在Obj-C中遇到了这个问题,对此感到非常困惑。通过这样做,我得到了我想要的结果:
if(0 < 5 && 5 < 3) {
alert("True");}
这当然是假的,所以你不会得到“真”警报。 很高兴我读了这篇文章,我现在知道为什么了。
因为true < 3,因为true == 1
这很简单。
(0 < 5 < 3)
从左到右开始,所以它计算第一个0 < 5。这是真的吗?是的。由于TRUE=1,它的计算值为1 < 3。因为1小于3,所以它是正确的。
现在有了这个
(0 < 5 < 1)
0小于5吗?是的。所以设为TRUE,也就是1。现在记住了这个事实,它的值是(1 < 1)1小于1吗?不,因此它是假的。它必须相等。
可能是因为true被假设为1
0 < 5 < 3 --> true < 3 --> 1 < 3 --> true