短路逻辑或语句,与内联三元组合

Short circuit logical or statement, combined with an inline ternary

本文关键字:组合 三元 语句 短路      更新时间:2023-09-26

我了解在 JavaScript 中使用逻辑或运算符时短路评估的工作原理,但我遇到了一个我不完全理解的奇怪边缘情况。

因此,此片段的工作方式符合我的预期:

const a = 'a' || 'b';

a的值为

'a' .

当然,这也符合我所期望的方式:

const a = false || 'b';

a的值为 'b' .

但是,我遇到了这样的奇怪情况:

const a = true || true || true ? 'a' : 'b';

其中a现在的值为 'a' 。我尝试了其他组合,例如:

const a = true || false || true ? 'a' : 'b';

a仍然具有 'a' 的值.

要尝试的另一件事是这样的:

const fn = () => true ? 'a' : 'b';
const a = true || fn();

当然a的值是truefn永远不会被调用。

这是怎么回事?

逻辑

OR ||从左到右计算,并返回计算结果为真实值的第一个值,或者如果它们都没有计算结果为 true 的最后一个值。

在这种情况下,第一个true的计算结果很简单地计算为 true,因此整个条件返回true

true || true || false

结果,计算三元运算符的第一个表达式,在本例中'a'

const a = true || true || true ? 'a' : 'b';

因此,a等于 'a' .

相同的逻辑适用于您列出的其他情况。