【问题标题】:Short circuit logical or statement, combined with an inline ternary短路逻辑或语句,结合内联三进制
【发布时间】: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


【解决方案1】:

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

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

true || true || false

因此,ternary operator 的第一个表达式被求值,在本例中为 'a'

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

因此,a 等于 'a'

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

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2016-06-17
    • 2015-04-11
    相关资源
    最近更新 更多