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

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

这个也一样:

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

但这不是:

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

这种怪癖有用吗?


当前回答

这很简单。

(0 < 5 < 3)

从左到右开始,所以它计算第一个0 < 5。这是真的吗?是的。由于TRUE=1,它的计算值为1 < 3。因为1小于3,所以它是正确的。

现在有了这个

 (0 < 5 < 1)

0小于5吗?是的。所以设为TRUE,也就是1。现在记住了这个事实,它的值是(1 < 1)1小于1吗?不,因此它是假的。它必须相等。

其他回答

0 < 5 < 3 
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true

可能是因为true被假设为1

0 < 5 < 3  -->  true < 3 -->  1 < 3  --> true

不久前,我在Obj-C中遇到了这个问题,对此感到非常困惑。通过这样做,我得到了我想要的结果:

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

这当然是假的,所以你不会得到“真”警报。 很高兴我读了这篇文章,我现在知道为什么了。

它的值是0<5当1<3为真时返回1为真吗?

操作符“<”不能应用于类型为“bool”和“int”的操作数

试着把你的结果写成Number()

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

或者试试这个:

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

我谷歌了一下,因为我得到(3 >= 20)//返回true,我猜javascript试图检查3作为布尔值,因为我从elm.getAttribute()得到这个值;函数console.log();正在以字符串形式打印。