可选链操作符?. -- 完成
2023-06-13 本文已影响0人
浅浅_2d5a
.为链式操作符
?.为可选链式操作符
应用到属性上
const room= {
student: {
name: '张三'
}
}
var age1 = room.student.name
var age2 = room.student2.name 会报错
Cannot read properties of undefined (reading 'name')
需要加判断
var age2 = room.student2 && room.student2.name 麻烦
使用可选链操作符
var age2 = room.student2?.name
当room上student2为undefined时候,直接短路返回undefined
使用[]访问属性,可以使用可选链
obj?.['name']
可选链不能被赋值
obj2?.money = 20
报错:Invalid left-hand side in assignment
应用到方法上
var obj = {
fn:1
}
obj.fn2?.()
obj.fn2为假的时候 返回undefined
obj.fn2为非函数的时候, obj.fn2?.() 依旧报错
任何形式的
image.png
都可以使用可选连写法
onError?.(err.message)
应用到数组某一项
arr?.[30]
应用到Map实例中
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?.()