为什么间隔比较炸弹在JavaScript中不起作用?

if(-1 < x < 1) {
  console.log('x: ', x)
}


为什么我们允许这样做而不会出错?

另外似乎:


-1 < x < 1x<=-1为true
1 < x < 1x<=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 = -1x = 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/

10-11 22:23
查看更多