一、双问号语法??(空值合并操作符)
空值合并操作符??是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
console.log(null ?? "xx")
输出 xx
console.log(1 ?? "xx")
输出 1
二、问号点 ?. (可选链操作符)
object?.attr获取object属性attr前先判断object是否存在,在object后面加上?,这是JavaScript的可选链语法。(这句代码的意思是,如果object恒等于null或者undefined时,取值为undefined,否则为object.attr。) 使用它的好处是引用为null 或者 undefined的情况下不会引起错误
var obj={a:{b:1}}
console.log(obj?.a?.b)
输出1
console.log(obj?.a?.c)
输出 undefined
例:可选链默认值
const data = {}
console.log(data.detail?.name ?? '默认name') // '默认name'
三、问号冒号(?: )
三目运算,具体表达式是(condition ? exprIfTrue : exprIfFalse)
该表达式的含义是 条件condition是真,则执行exprIfTrue ,否则执行exprIfFalse