如果我们使用 JavaScript 不管是用在前端或者 Node.js 服务端都会出现如下情况,因为我们有时是不确定 user 对象是否存在,又或者 user 对象里面的 address 是否存在,如果不这样判断, 可能会得到类似于 Cannot read property ‘xxx’ of undefined 这样的类似错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
const user = {
name: 'Haley',
address: {
city: 'GuangZhou'
}
}

optionalChaining(){
if (this.user.address.city1.length > 0){
alert("原先写法触发");
}
}

现在我们有一种优雅的写法 “可选链操作符”,不必明确的验证链中的每个引用是否有效,以符号 “?.” 表示,在引用为 null 或 undefined 时不会报错,会发生短路返回 undefined。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

optionalChaining(){
if (this.user.address?.city1?.length > 0){
alert("新特性触发");
}
},

user.address?.city
user.address?.city?.length

// 结合 ?.[] 的方式访问相当于 user.address['city']
user.address?.['city']

// 结合 delete 语句使用,仅在 user.address.city 存在才删除
delete user.address?.city