我在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 ) < 3 )
==> true < 3
==> 1 < 3
==> true

其他回答

试着把你的结果写成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();正在以字符串形式打印。

可能是因为true被假设为1

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

布尔操作数在数学运算符上操作时返回一个数字。 为了验证这一点,我们做了

true + 1  which gives you 2.

所以0 < 5,用数学运算符(<)操作返回的布尔值(true)将返回一个数字。结果是1<3,返回true

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

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