.為鏈?zhǔn)讲僮鞣?br> ?.為可選鏈?zhǔn)讲僮鞣?/p>
應(yīng)用到屬性上
const room= {
student: {
name: '張三'
}
}
var age1 = room.student.name
var age2 = room.student2.name 會(huì)報(bào)錯(cuò)
Cannot read properties of undefined (reading 'name')
需要加判斷
var age2 = room.student2 && room.student2.name 麻煩
使用可選鏈操作符
var age2 = room.student2?.name
當(dāng)room上student2為undefined時(shí)候惠况,直接短路返回undefined
使用[]訪問屬性挠铲,可以使用可選鏈
obj?.['name']
可選鏈不能被賦值
obj2?.money = 20
報(bào)錯(cuò):Invalid left-hand side in assignment
應(yīng)用到方法上
var obj = {
fn:1
}
obj.fn2?.()
obj.fn2為假的時(shí)候 返回undefined
obj.fn2為非函數(shù)的時(shí)候掰盘, obj.fn2?.() 依舊報(bào)錯(cuò)
任何形式的
都可以使用可選連寫法
onError?.(err.message)
應(yīng)用到數(shù)組某一項(xiàng)
arr?.[30]
應(yīng)用到Map實(shí)例中
let myMap = new Map()
myMap.set('foo': {name:'san',age:10})
var tooName = myMap.get('too')?.name
可選鏈操作符可以連用
let zhangsanAge = room1.student?.no1?.age
屬性和方法中的連用
let zhangsanAge = room1.student?.game?.()