可选链操作符
【知识】可选链接改变了从深度嵌套对象访问属性的方式。它解决了在 JavaScript 中访问一长串对象属性时必须进行多次 null 检查的问题。
【例子】
obj = {
prop1: {
prop2: {
someProp: "value",
},
},
};
在 JavaScript 中访问对象中不存在的键会返回 undefined,如果您继续尝试访问嵌套值并且父键不存在,那么会导致TypeError: Cannot read property ... of undefined错误。因此您在访问对象时,必须先判断键是否存在,存在才继续访问,你会经常看见如下形式代码:
obj.prop1 && obj.prop1.prop2 && obj.prop1.prop2.someProp;
可见,上述代码十分冗长。可选链正是解决了这一问题。它让我们将上面的整个代码重构为以下内容:
obj.prop1?.prop2?.someProp;
如果其中一个属性是 null 或 undefined,则可选链?.将停止读取您要求它读取的属性并返回 undefined.
【知识】可选链存在变体
obj?.prop—— 如果obj存在则返回obj.prop,否则返回undefined。obj?.[prop]—— 如果obj存在则返回obj[prop],否则返回undefined。obj.method?.()—— 如果obj.method存在则调用obj.method(),否则返回undefined。
【提问1】如何正确的使用可选链?
- 根据我们的代码逻辑,仅在当左侧部分不存在也可接受的情况下使用为宜。
- 只有在属性可选的时候才使用可选链
【提问2】什么情况是左侧部分不存在也可接受?