为什么这个陈述的中间数字结果?
(0 || 0.571428571428571 || 1) == 0.571428571428571
比较如何运作?
好。看起来像愚蠢的问题。对于那些在php中工作的人来说,这个语句有不同的结果可能有助于知道 JS将返回数字而不是bool。
答案 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值,因此不会返回它,但浮点值是一个真值,因此会返回。