表达式和运算符

空值合并运算符??

语法

leftExpr ?? rightExpr

用来判断左侧内容是否为nullundefined。如果为nullundefined则返回左侧内容,否者返回右侧内容。

const foo = null ?? 'defatult string'
// foo 默认值是default string
const foo = 0 ?? 'defatult string'
// foo 默认值是0

与逻辑或运算符(||)的区别

逻辑或运算符是一个布尔逻辑运算符,会把左侧容转换成布尔值,任何假值(0,'',NaN,null,undefined)都不会被返回。

如果想定义这些假值为初始值的话,应该使用空值合并运算符??

可选链运算符(?.

语法

obj.val?.prop
obj.val?.[expr]
obj.func?.(args)

允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。在引用的值为空(null,undefined不报错)或者引用函数不存在的时候返回undefined

当尝试访问可能不存在的对象属性时,可选链运算符将会使表达式更短、更简明。