我在jsfiddle.net上玩,我很好奇为什么这个返回真?

if(0 < 5 < 3) {
    alert("True");
}

这个也一样:

if(0 < 5 < 2) {
    alert("True");
}

但这不是:

if(0 < 5 < 1) {
    alert("True");
}

这种怪癖有用吗?


当前回答

我猜是因为0 < 5为真,而true < 3转换为1 < 3为真。

其他回答

除了python, CoffeeScript是另一种支持链式比较的语言,因此在vanilla JS中3 < x < 10将被转换为(3 < x && x < 10)

因为true < 3,因为true == 1

因为0小于5,所以返回true,默认情况下,true是任何值,包括并且可以被赋值为1,而1仍然小于3,同样返回true

这很简单。

(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