我在 jsfiddle.net 上玩,我很好奇为什么这会返回 true?
if(0 < 5 < 3) {
alert("True");
}
这样做也是如此:
if(0 < 5 < 2) {
alert("True");
}
但这不会:
if(0 < 5 < 1) {
alert("True");
}
这个怪癖有用吗?
我在 jsfiddle.net 上玩,我很好奇为什么这会返回 true?
if(0 < 5 < 3) {
alert("True");
}
这样做也是如此:
if(0 < 5 < 2) {
alert("True");
}
但这不会:
if(0 < 5 < 1) {
alert("True");
}
这个怪癖有用吗?
操作顺序导致(0 < 5 < 3)
在 javascript 中被解释为((0 < 5) < 3)
哪个产生(true < 3)
并且 true 被计为 1,导致它返回 true。
这也是为什么(0 < 5 < 1)
返回 false,(0 < 5)
返回 true,这被解释为1
,导致(1 < 1)
。
我的猜测是因为0 < 5
是真的,true < 3
并被强制转换1 < 3
为真。
可能是因为true
假设1
如此
0 < 5 < 3 --> true < 3 --> 1 < 3 --> true
因为true < 3
,因为true == 1
至于你这个怪癖是否有用的问题:我想在某些情况下它可能有用(如果你想要的是浓缩代码),但依赖它(很可能)会严重降低你的代码的可理解性。
这有点像使用 post/pre increment/decrement 作为更大表达式的一部分。你能一眼就判断出这段代码的结果是什么吗?
int x = 5;
int result = ++x + x++ + --x;
注意:使用此代码,有时甚至可以根据语言和编译器获得不同的结果。
让你自己和下一个阅读你的代码的人的生活变得轻松是个好主意。清楚地写出您真正想要发生的事情,而不是依赖于诸如布尔值的隐式转换之类的副作用。