短路逻辑或语句,结合内联三元
Short circuit logical or statement, combined with an inline ternary
我了解在 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
。
这是怎么回事?
返回一个 logical OR ||
is evaluated from left to right and the first value that evaluates to a truthy value,如果其中 none 的计算结果为 true
,则返回最后一个。
在这种情况下,第一个 true
的计算结果很简单 true
,因此整个条件 returns true
:
true || true || false
因此,计算 ternary operator 的第一个表达式,在本例中为 'a'
:
const a = true || true || true ? 'a' : 'b';
因此,a
等于 'a'
。
同样的逻辑适用于您列出的其他情况。
我了解在 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
。
这是怎么回事?
返回一个 logical OR ||
is evaluated from left to right and the first value that evaluates to a truthy value,如果其中 none 的计算结果为 true
,则返回最后一个。
在这种情况下,第一个 true
的计算结果很简单 true
,因此整个条件 returns true
:
true || true || false
因此,计算 ternary operator 的第一个表达式,在本例中为 'a'
:
const a = true || true || true ? 'a' : 'b';
因此,a
等于 'a'
。
同样的逻辑适用于您列出的其他情况。