【发布时间】:2016-11-16 16:17:46
【问题描述】:
我了解在 JavaScript 中使用逻辑或运算符时短路评估的工作原理,但我遇到了一个我不完全理解的奇怪的边缘情况。
所以,这个 sn-p 的工作方式符合我的预期:
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。
这是怎么回事?
【问题讨论】:
-
运算顺序...
true || true || true ? 'a' : 'b'等价于(true || true || true) ? 'a' : 'b'
标签: javascript logic ternary-operator