1. 跟 || 的区别
当一个值既不是
null
也不是undefined
时,我们将其称为“已定义的(defined)”
?? 是用于设定默认值,当赋值或运算的变量不确定是否已定义时,可以给变量设定默认值
a ?? b
的结果是:
- 如果
a
是已定义的,则结果为a
, - 如果
a
不是已定义的,则结果为b
。
let a
const b = a ?? 100
console.log(b) // 100
let a = 1
const b = a ?? 100
console.log(b) // 1
当a是已定义的时候,直接使用a的值
很多朋友会想到使用 || 也可以实现同样的效果,但使用 || 操作符在面对假值时,会有问题
let a = 0
const b = a || 100
console.log(b) // 100
let a = 0
const b = a ?? 100
console.log(b) // 0
当面对假值时,|| 操作符会直接取第一个非假值的值,而??操作符不管是否假值,只取第一个已定义的值
2.优先级
??操作符的优先级是3,与|| 的优先级相同,一般只有在=和?前运算,在其他操作符后(+、-等)运算