区间比较不会在 JS 中爆炸

Interval comparison doesn't bomb in JS

为什么JavaScript中没有区间比较炸弹?

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

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

似乎还有:

在最后两种情况下,它似乎只是比较表达式的两端。这些表达式是如何计算的?

因为JavaScript 允许隐式类型强制转换,在本例中是从布尔值到数字。 -1 < x 产生一个布尔值,然后将其隐式强制为 (result) < 1 部分的数字(true = 1,false = 0)。所以:

  • -1 < x为假时,第二部分为0 < 1为真。

  • -1 < x为真时,第二部分为1 < 1,为假。

规范中的 abstract relational comparison 算法及其链接到的各种操作都涵盖了这一点。

-1 < x < -1 is always false
-2 < x < 2 is always true

In the last 2 cases it seems it is just comparing the 2 ends of the expressions. How are those expressions evalued?

使用 x = -1x = 1:

  • 如果x = -1,则-1 < x为假,所以其余为0 < -1,为假
  • 如果x = 1,则-1 < 1为真,所以剩下的1 < -1为假。
  • 如果x = -1,则-2 < -1为真,所以其余为1 < -2,为假
  • 如果x = 1,则-2 < 1为真,所以剩下的1 < -2为假。

我认为发生这种情况是因为 javascript 隐含地认为 true 具有值 1 并且 false 具有值 0

当你做 -1 < x < 1 时,你实际做的是 (-1 < x) < 1,或者 true < 1 如果 x = 0false

但是,如果 x=-2(-1 < x < -1) 将 return true,因为 false < 1true。希望这会有所帮助。

您可以在此处阅读更多相关信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

原因是JS解释了你的表达。

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

正在尝试使用牙套...