【发布时间】:2014-02-16 05:15:23
【问题描述】:
false && 短路评估为 false。
鉴于此信息,我预计 false && true || true 的评估结果为 false。然而,这种情况并非如此。预期结果 (false) 仅在语句编写如下时给出:
false && (true || true)
我和一位同事试图解决这个问题,我们能想到的最接近的事情是该语句正在按优先级顺序进行评估。根据MDN Operator Precedence logical-and 比logical-or 具有更高的精确度,这表明条件被评估为好像false && true 是单个语句,然后继续确定false || true 的布尔条件,然后true。写出来,这将是:
(false && true) || true
这里出了点问题。要么是文档,要么是 JavaScript 解析逻辑,要么是我的解释。
编辑:
我添加了一个赏金,因为给出的答案都没有真正理解这个问题。如上所述:MDN Logical Operators 页面准确地指出:“假 && 任何东西都被短路评估为假。”
“任何东西”的意思是“任何东西”!
【问题讨论】:
-
计算结果为
false。您确定这不是更复杂操作的一部分吗? -
没有错,您展示的第二种形式是它的工作方式, (false && true) 评估为 false,因此最终结果为:
false || true这将给出 true,因为其中至少有一个是真的。 -
当你强调“任何东西”的意思是“任何东西”!肯定是正确的 - any RHS 表达式是短路的并且没有被评估 - “anything” not 表示“anything and everything”。
-
任何事情都意味着任何事情。这意味着接下来的事情,无论它可能是什么。正如@BrianNorth 所说,这并不意味着一切。如果它确实意味着一切,那么您的程序会在遇到
false &&时立即停止,因为它只会使程序的其余部分短路。 -
(false && true) || true与false && (true || true)不同。你认为你的代码代表什么?false && anything是假的。但是你有一个额外的|| true。
标签: javascript logic short-circuiting