我在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");
}
这个怪癖有用吗?
Answers:
操作顺序导致(0 < 5 < 3)
在javascript中解释为((0 < 5) < 3)
产生(true < 3)
并且true计数为1,导致其返回true。
这也是为什么(0 < 5 < 1)
返回false,(0 < 5)
返回true,为什么将其解释为1
,从而导致的原因(1 < 1)
。
if(0 < 5 < 1) == false
。现在一切都清楚了,谢谢:)
((0 < 5) && (5 < 3))
,可能还有其他语言,但我不知道。
我的猜测是因为 0 < 5
是正确的,并且true < 3
被强制转换1 < 3
为正确的。
关于您的问题,该怪癖是否有用:我想在某些情况下它会有用(如果您追求的是压缩代码),但依靠它(很可能)将严重降低代码的可理解性。
有点像使用后/前递增/递减作为较大表达式的一部分。您能一眼确定此代码的结果吗?
int x = 5;
int result = ++x + x++ + --x;
注意:使用此代码,有时甚至可以根据语言和编译器获得不同的结果。
一个好主意是让自己和下一个将阅读您的代码的人都过得轻松。清楚地写出您实际想要发生的事情,而不要依赖副作用,例如布尔值的隐式转换。
result
18岁吗?
问题第二部分的答案是“这个怪癖有用吗?” 如先前的回答所述,如果确实是对语言(Javascript)的怪癖,则将true强制转换为1,但程序员通常不将1和true(以及0和false)视为是真话。一样。
但是,如果您有一个心理模型,即1为true,0为false,那么它将导致产生各种非常有用,强大且直接的布尔技术。例如,您可以使用A> 100的结果直接增加计数器,如果A大于100,则可以增加计数器。此技术在Java中可能被视为怪癖或技巧,但使用数组或函数式语言可能是惯用的。
数组语言APL中的经典示例是计算(例如)大于100的数组中的项目数:
+/A>100
如果A是5项数组107 22 256 110 3,则:
A>100
产生5项布尔数组:
1 0 1 1 0
并对这个布尔结果求和:
+/1 0 1 1 0
得出最终答案:
3
这个问题是该技术在哪里非常有用的一个完美示例,特别是如果该问题被普遍确定为m个布尔值中的n个是否为真。
它是否评估0 <5,而当1 <3为真时将返回1为真?
C#希望您执行此操作:“运算符'<'无法应用于类型为'bool'和'int'的操作数”
0 < 5 < 3
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true
当对数学运算符进行运算时,布尔操作数将返回数字。检查一下我们
true + 1 which gives you 2.
因此0 < 5
,使用数学运算符(<)操作的返回布尔值(true)将返回一个数字。所以它沸腾到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) //returning true
,我猜javascript正在尝试将其检查3
为布尔值,因为我是从以字符串形式打印的elm.getAttribute();
函数中获取此值的console.log();
。