链判断运算符
在日常中,判断是一个对象属性是否存在,有以下写法
let message = (message
&& message.head
&& message.head.style
&& message.head.style.div) || 'null'
三元运算符判断
let div = document.querySelector('div');
let box = div ? div.textContent : undefined
这样层层嵌套显得不直观,并且麻烦,因此ES6引入了链判断运算符 (?.)
let message = {
head: {
style: {
div: 'div'
}
}
}
let message1 = message ?. head ?. style ?. div
let box = document.querySelector('div')?.textContent
上面代码使用了?. 运算符,直接在链式调用时判断,如果左边为null或undefined,不再往下运算,直接返回undefined
链运算符使用的范畴
obj?.prop // 对象属性
obj?.[prop] // 同上
func?.() // 函数或对象函数的调用