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

时间:2016-11-16 16:17:47

标签: javascript logic ternary-operator

我理解在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的值为true,永远不会调用fn

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

从左到右评估logical OR ||,并返回评估为truthy value的第一个值,如果没有评估为true,则返回最后一个值。

在这种情况下,第一个true评估为true,因此整个条件返回true

true || true || false

结果,评估了ternary operator的第一个表达式,在本例中为'a'

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

出于这个原因,a等于'a'

同样的逻辑适用于您列出的其他案例。