OR 运算符与实数

OR operator with real numbers

为什么这个语句的结果是mid?

(0 || 0.571428571428571 || 1) == 0.571428571428571

比较是如何进行的?


嗯。看起来像个愚蠢的问题。对于那些在 php 中工作的人来说,这个语句有不同的结果可能有助于了解 JS 将 return number 而不是 bool.

你的表达被解读为

((0 || 0.571428571428571) || 1)

第一个 || 的结果是真值,所以这是整个表达式的结果。这就是 || 的工作原理:如果结果为真,则结果为 left-hand 操作数,否则为 right-hand 操作数。

|| 是一个 short-circuiting 运算符。它评估其 left-hand 操作数,并且 returns 如果它是真实的,否则它评估 returns 它的 right-hand 运算符。当您有一系列 || 运算符时,它会执行此 left-to-right,返回第一个真值(如果 none 为真,则返回最后一个值)。

在你的例子中,0 是假的,所以 0.571428571428571 是第一个真值,它被返回。

答案在于 0 被认为是假值,而 non-zero 数字被认为是真值。

因为||&&会短路,return一知道结果就短路。对于 OR 表达式,这意味着第一个真值将被 returned。对于 AND 表达式,这意味着第一个假值是 returned:

(true && true && 0 && true) === 0
(false && false && 1) === 1

(false || false || 1 || false) === 1
(false || false || 0) === 0

由于表达式中的第一个值是假值,它不是 returned 但浮点数是真值,所以它是 returned。