我在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");
}
这种怪癖有用吗?
当前回答
它的值是0<5当1<3为真时返回1为真吗?
操作符“<”不能应用于类型为“bool”和“int”的操作数
其他回答
至于你问的这个怪癖是否有用:我想在某些情况下它是有用的(如果你追求的是压缩代码),但依赖它(很可能)会严重降低代码的可理解性。
这有点像使用后/前递增/递减作为更大表达式的一部分。您能一眼确定这段代码的结果吗?
int x = 5;
int result = ++x + x++ + --x;
注意:使用这些代码,有时甚至可以得到不同的结果,这取决于语言和编译器。
让你自己和下一个阅读你代码的人的生活变得简单是一个好主意。清楚地写出你真正想要发生的事情,而不是依赖于副作用,比如布尔值的隐式转换。
我猜是因为0 < 5为真,而true < 3转换为1 < 3为真。
操作顺序导致(0 < 5 < 3)在javascript中被解释为((0 < 5)< 3),产生(true < 3), true被计数为1,导致它返回true。
这也是为什么(0 < 5 < 1)返回false,(0 < 5)返回true,这被解释为1,导致(1 < 1)。
不久前,我在Obj-C中遇到了这个问题,对此感到非常困惑。通过这样做,我得到了我想要的结果:
if(0 < 5 && 5 < 3) {
alert("True");}
这当然是假的,所以你不会得到“真”警报。 很高兴我读了这篇文章,我现在知道为什么了。
布尔操作数在数学运算符上操作时返回一个数字。 为了验证这一点,我们做了
true + 1 which gives you 2.
所以0 < 5,用数学运算符(<)操作返回的布尔值(true)将返回一个数字。结果是1<3,返回true