逻辑或运算符|| 、 空值合并运算符??和逻辑与操作符 &&
区别
||
返回第一个真值。??
返回第一个已定义的值。
JavaScript里的假值只有false、null、undefined、空字符、0和NaN。
运算符 | 优先级 | 运算符类型 | 顺序 |
---|---|---|---|
… && … | 5 | 逻辑与 (&&) | 从左到右 |
…|| … | 4 | 逻辑或 || | 从左到右 |
… ?? … | 4 | 空值合并 (??) | 从左到右 |
空值合并运算符 ??
空值合并运算符??
:value1 ?? value2
只有当value1
为null或者 undefined 时取value2
,否则取value1
说明
- 短路运算,当左表达式为 null 或 undefined 时,不会对右表达式进行求值。
- 不能与
&&
和||
运算符组合使用,除非使用括号明确指定了优先级 - 常用场景:为常量提供默认值,保证常量不为null或undefined
原理
const result = value !== undefined && value !== null ? value : defaultValue;
逻辑或运算符 ||
逻辑或运算符||
:如果第一个操作数为真,则返回第一个操作数的值;否则返回第二个操作数的值。
说明
||
是一个布尔逻辑运算符,左侧的操作数会被强制转换成布尔值。- 短路运算,当左表达式为真时,不会对右表达式进行求值
JavaScript 在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,例如条件语句、||
、&&
等。
JS中的假值: 能够转化为 true 的值叫做真值,能够转化为 false 的值叫做假值。
- false
- null
- undefined
- 0
- NaN
- “ ”
//{}为真值
if({
})console.log('xxx') //xxx
//[]为真值
if([])console.log('xxx') //xxx
逻辑与操作符 &&
逻辑与操作符 &&
:从左到右对操作数求值,遇到第一个假值操作数时立即返回;如果所有的操作数都是真值,则返回最后一个操作数的值。
说明
- 短路运算,当每个操作数被转换为布尔值时,如果发现一个转换的结果是 false,那么逻辑与运算符就会停止,并返回该假操作数的原始