带有实数的OR运算符

时间:2016-01-07 21:29:44

标签: javascript logical-operators

为什么这个陈述的中间数字结果?

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

比较如何运作?

好。看起来像愚蠢的问题。对于那些在php中工作的人来说,这个语句有不同的结果可能有助于知道 JS将返回数字而不是bool。

3 个答案:

答案 0 :(得分:3)

您的表达式被解释为

((0 || 0.571428571428571) || 1)

第一个||的结果是真实的,因此这是整体表达的结果。这就是||如何运作的结果:如果它是真正的左手操作数,那么结果就是左手操作数,或者是右手操作数。

答案 1 :(得分:3)

||short-circuiting运营商。它评估它的左操作数,并返回它,如果它是真实的,否则它评估并返回其右手操作符。当你有一个||运算符序列时,它从左到右执行,返回第一个真值(如果没有真值则返回最后一个值)。

在您的示例中,0是假的,因此0.571428571428571是第一个真值,并且它已被返回。

答案 2 :(得分:1)

对此的答案在于,0被认为是假值,而非零数被认为是真的。

由于||&&会在知道结果后立即短路并返回。对于OR表达式,这意味着将返回第一个truthy值。对于AND表达式,它表示返回第一个false值:

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

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

由于表达式中的第一个值是falsey值,因此不会返回它,但浮点值是一个真值,因此会返回。