短路逻辑或语句,与内联三元组合
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
永远不会被调用。
这是怎么回事?
逻辑
OR ||
从左到右计算,并返回计算结果为真实值的第一个值,或者如果它们都没有计算结果为 true
的最后一个值。
在这种情况下,第一个true
的计算结果很简单地计算为 true
,因此整个条件返回true
:
true || true || false
结果,计算三元运算符的第一个表达式,在本例中'a'
:
const a = true || true || true ? 'a' : 'b';
因此,a
等于 'a'
.
相同的逻辑适用于您列出的其他情况。
相关文章:
- 根据id将json数组组合为一个json数组
- 三元对短路
- 接受不在列表中的值-引导组合框
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 组合两个javascript函数
- Telerik rad组合框多列数据绑定
- 组合 2 个 JavaScript .scroll 函数
- 如何使用jquery组合两个数组
- onChange不足以从Dojo组合框触发查询
- 组合承诺和非承诺值
- 所有控件的组合框
- 在D3中组合多个事件
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- AngularJS-如何只对多个事件的组合采取行动
- 如何在服务、技能、投资组合等方面添加滑动效果
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 如何在谷歌可视化中组合数字和模式格式化程序
- 三元运算符检查多个字符串
- 更改组合框分页后,getValue和getRawValue返回相同的值
- 短路逻辑或语句,与内联三元组合