在某些情况下,需要访问一个层级多的对象,如obj.a.b.c。而这个obj并不能保证一定有这些属性的时候,经常会导致Uncaught TypeError: Cannot read property 'XX' of undefined。如果每一层就判断一次是不是undefined,那实在是太麻烦了。使用可选链操作符就可以解决这种情况。
可选链操作符
- 就像使用.一样使用可选链操作符?. 不同的是,可选链操作符不会造成报错,在属性不存在的情况下,会返回undefined
-
可选链操作符也可以用于函数调用,如obj.fn?.()
-
可选链操作符也可以用于数组取值和对象[]取值,如arr?.[42]?.[1]和obj?.["my" + "name"]?.value
-
可选链操作符不能用于赋值,如obj?.abc = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment
const obj = {
a: { b: 123 },
};
const value = obj?.b?.a;
const fn = obj.fn?.();
const myName = obj?.["my" + "name"]?.value;
console.log(value); // undefined
console.log(fn); // undefined