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。
为什么这个语句的结果是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。