JavaScript 比较运算符

javascript comparison operators

本文关键字:运算符 比较 JavaScript      更新时间:2023-09-26

我来自 python 背景,在做一个 JavaScript 项目后遇到了一个问题,其中

0 <5 <3

输出为 true我的猜测是它运行第一个运算符并完全忽略第二个运算符

和 python 它将渲染为 false。

我不关心如何让它工作,但奇怪的是它不在文档中,它只是暗示要做(0

猜猜我的问题是,如果有人能回答,为什么会这样

在 JavaScript 中,这个:

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,0 变为 false。

0 < 5 < 3 // =>
true < 3 // =>
Number(true) < 3 // =>
1 < 3 // =>
true

请参阅规范 11.8.5 规则 3,其中描述了铸造ToNumber

3)如果不是Type(px)都是字符串而Type(py)都是字符串,那么

a) 让 nx 是调用 ToNumber(px) 的结果。因为 px 和 py 是原始的 值的求值顺序并不重要。

b) 让 ny 成为调用 ToNumber(py) 的结果。

在 JavaScript 中,关系运算符从左到右执行:

0 < 5

将是真的,即 1 ,所以

0 < 5 < 3

翻译为:

1 < 3

这是真的。

另一方面,Python 中的比较操作具有相同的优先级。

同样与 C 不同的是,像 a < b < c 这样的表达式具有以下解释: 在数学中是约定俗成的。