我来自 Python 背景,在做 JavaScript 项目时遇到了一个问题,即:
0 < 5 < 3
输出结果为 true。我的猜测是它只运行了第一个操作符而完全忽略了第二个操作符。
在 Python 中,这会被渲染为 false。
我不关心如何让它起作用,但奇怪的是它没有在文档中解释清楚,只是暗示应该使用 (0 < x && x < 3 ) 来保持简单。
我猜我的问题是,如果有人能回答的话,为什么会这样?
0 < 5 < 3
输出结果为 true。我的猜测是它只运行了第一个操作符而完全忽略了第二个操作符。
在 Python 中,这会被渲染为 false。
我不关心如何让它起作用,但奇怪的是它没有在文档中解释清楚,只是暗示应该使用 (0 < x && x < 3 ) 来保持简单。
我猜我的问题是,如果有人能回答的话,为什么会这样?
0 < 5 < 3
如下所示进行评估:
(0 < 5) < 3
这意味着:
true < 3
这会进一步将其翻译为以下内容(因为在数值上下文中,true
等同于 1
):
1 < 3
这是真的。
然而,Python 的设计方式不同。正如这里所记录的那样,它解释了这个:
0 < 5 < 3
被视为等同于这个:
0 < 5 and 5 < 3
以上表达式可以进一步翻译为:
True and False
这是错误的。
<
比较数字和布尔值时,true变成1,false变成0。0 < 5 < 3 // =>
true < 3 // =>
Number(true) < 3 // =>
1 < 3 // =>
true
ToNumber
强制类型转换。
3)如果不是Type(px)为String且Type(py)为String,则
a)让nx成为调用ToNumber(px)的结果。因为px和py是原始值,所以求值顺序无关紧要。
b)让ny成为调用ToNumber(py)的结果。