为什么间隔比较炸弹在JavaScript中不起作用?
if(-1 < x < 1) {
console.log('x: ', x)
}
为什么我们允许这样做而不会出错?
另外似乎:
-1 < x < 1
对x<=-1
为true1 < x < 1
对x<=1
为true-1 < x < -1
始终为假-2 < x < 2
始终为真在最后两种情况下,似乎只是比较表达式的两个末端。这些表达式如何计算?
最佳答案
因为JavaScript允许隐式类型强制,所以在这种情况下从boolean到number。 -1 < x
生成一个布尔值,然后将其隐式强制为(result) < 1
部分的数字(true = 1,false = 0)。所以:
当-1 < x
为false时,第二部分为0 < 1
,这是正确的。
当-1 < x
为true时,第二部分为1 < 1
,它为false。
规范的abstract relational comparison算法及其链接的各种操作对此进行了介绍。
-1 < x < -1 is always false
-2 < x < 2 is always true
在最后两种情况下,似乎只是比较表达式的两个末端。这些表达式如何计算?
使用
x = -1
和x = 1
:如果
x = -1
,则-1 < x
为false,因此其余为0 < -1
,为false。如果
x = 1
,则-1 < 1
为true,因此其余为1 < -1
,它为false。如果
x = -1
,则-2 < -1
为true,因此其余为1 < -2
,这是错误的。如果
x = 1
,则-2 < 1
为true,因此其余为1 < -2
,它为false。关于javascript - 间隔比较不会在JS中轰炸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53320295/