什么是“?”。 (问号后的点)在JS中的意思

时间:2020-08-07 18:15:36

标签: javascript object ecmascript-2020

我偶然发现了“?”。另一个SO问题中的语法。像这样-

console.log(x?.y?.z);

它有什么作用?

1 个答案:

答案 0 :(得分:0)

这称为Optional Chaining

它允许使用属性链接,而不必验证每个级别中的属性。它在不引发异常的情况下短路了属性评估,从而避免了“无法读取未定义的X”错误。

let o = {p: {q: 'foo'}};


try {
  console.log('Trying to access the property x');
  console.log(o.x.y);
}
catch(e) {
  console.log('That was an error');
}


console.log('Trying to access the property x with Optional Chaining');

console.log(o?.x?.y);


可选地链接更多用例

带有函数调用

let result = someInterface.customMethod?.();

带有表达式

let nestedProp = obj?.['prop' + 'Name'];

具有数组元素

let arrayItem = arr?.[42];

ECMAScript Draft