区间比较不会在 JS 中爆炸
Interval comparison doesn't bomb in JS
为什么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 允许隐式类型强制转换,在本例中是从布尔值到数字。 -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 = -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 隐含地认为 true
具有值 1
并且 false
具有值 0
。
当你做 -1 < x < 1
时,你实际做的是 (-1 < x) < 1
,或者 true < 1
如果 x = 0
即 false
。
但是,如果 x=-2
,(-1 < x < -1)
将 return true
,因为 false < 1
是 true
。希望这会有所帮助。
您可以在此处阅读更多相关信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
原因是JS解释了你的表达。
if((-1 < x) < 1) {
console.log('x: ', x)
}
正在尝试使用牙套...
为什么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 允许隐式类型强制转换,在本例中是从布尔值到数字。 -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 = -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 隐含地认为 true
具有值 1
并且 false
具有值 0
。
当你做 -1 < x < 1
时,你实际做的是 (-1 < x) < 1
,或者 true < 1
如果 x = 0
即 false
。
但是,如果 x=-2
,(-1 < x < -1)
将 return true
,因为 false < 1
是 true
。希望这会有所帮助。
您可以在此处阅读更多相关信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
原因是JS解释了你的表达。
if((-1 < x) < 1) {
console.log('x: ', x)
}
正在尝试使用牙套...