为什么 JavaScript 中的区间比较不会爆炸?
if(-1 < x < 1) {
console.log('x: ', x)
}
为什么我们可以这样做而不会出现错误?
而且似乎:
-
-1 < x < 1
对于x<=-1
是正确的 -
1 < x < 1
对于x<=1
是正确的 -
-1 < x < -1
总是假的 -
-2 < x < 2
永远正确
在最后两种情况下,它似乎只是比较表达式的两端。这些表达式是如何评估的?
最佳答案
因为 JavaScript 允许隐式类型强制转换,在本例中是从 boolean 值到数字。 -1 < x
结果是一个 boolean 值,然后隐式强制转换为 (result) < 1
的数字(true = 1,false = 0)部分。所以:
何时
-1 < x
为 false,第二部分为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 = -1
和x = 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 - JS 中的间隔比较不会爆炸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320295/