我们将值既不是null也不是underfined的表达式称为“已定义的”
空值合并运算符的写法为两个问号 ??
a ?? b 的结果是:
- 如果a是已定义的,则结果为 a ,
- 如果 a 不是已定义的,则结果为 b
总结出来就是,如果第一个参数不是 null/underfined ,则 ?? 返回第一个参数,否则返回第二个参数。
1.我们可以用 ?? 来为未定义的变量提供一个默认值
像这里,如果user 是未定义的,那么我们将显示 Anonymous
如果有赋值,则显示所附的值
2.我们还可以用 ?? 从一系列值里面选出第一个非 null/undefined的值
与 || 比较
或运算符 || 可以与 ?? 运算符号相同的方式使用,比如在上面代码中,就可以用 || 替换掉 ??。
虽然在一些应用上他们可以相互替换,但是 ?? 是最近出来的,而他的出现是因为人们对 || 不太满意,他们之间的重要区别就是:
- || 返回第一个真值
- ?? 返回第一个已定义的值。
也就是说, || 无法区分 false、0、空字符串 "" 和 null/undedrfined 。他们都一样---------假值。
但如果在实际中,我们只想在变量的值为 null/underfined 时使用默认值。
如果高度 0为有效值,那么在 || 中还会把它替换为默认值因此用 ?? 才能得到正确的结果
优先级
?? 运算符优先级仅高于 = 和 ? ,但低于其他运算符(例如 + 和 * )
所以在用到 ??运算符的时候要 考虑加括号
?? 与 && 或 || 一起使用
出于安全考虑,JavaScript禁止 上面所述三个运算符一起使用,除非使用括号明确指出优先级