我理解在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
。
这里发生了什么?
答案 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'
。
同样的逻辑适用于您列出的其他案例。