鉴于这一信息,我期望false && anything会被短路计算为false。
false && true || true
会被计算为false。然而,事实并非如此。只有当语句写成以下形式时,才会得到预期的结果(false
):false && (true || true)
我和同事尝试解决这个问题,最接近的解释是该语句按照优先级进行评估。根据MDN运算符优先级,逻辑与
比逻辑或
具有更高的优先级,这表明条件被评估为false && true
是一个单一语句,然后继续确定false || true
的布尔条件,其结果为true
。写出来就是:
(false && true) || true
这里有些问题。可能是文档、JavaScript解析逻辑或者我的理解出了问题。
编辑:
我添加了赏金,因为没有一个答案真正理解这个问题。如上所述:MDN逻辑运算符页面明确说明:"false && anything" 短路求值结果为 false。
false || true
,因为其中至少有一个是 true,所以结果为 true。 - Patrick Evansfalse &&
时,它会立即停止,因为它只会短路程序的其余部分。 - ArtOfWarfare(false && true) || true
与false && (true || true)
不同。你认为你的代码代表哪一个?false && anything
是 false。但是你又有一个额外的|| true
。 - Octopus