?.是可选链操作符,被称为安全调用运算符或者空值传递操作符(null propagation operator)。
它的作用是在访问可能为空(null或undefined)的对象的属性或者方法时,避免因为访问了空对象而导致代码抛出异常报错,而是直接返回undefined。这可以让我们在访问对象属性前先对其进行存在性检查,以避免因对象不存在而导致的错误。
例如:
const obj = {
foo: {
bar: {
baz: 'hello'
}
}
};
// 传统的属性访问方式
if (obj && obj.foo && obj.foo.bar && obj.foo.bar.baz) {
console.log(obj.foo.bar.baz);
}
// 使用可选链操作符的属性访问方式
console.log(obj?.foo?.bar?.baz);
在传统的属性访问方式中,我们需要使用条件判断语句来判断对象及其属性是否存在,而使用可选链操作符的属性访问方式则更加简洁,不存在的属性会直接返回undefined,我们可以使用如条件语句或者空值合并操作符来对其进行处理。