JavaScript 可选链接 (?.) 运算符如何工作?

How does the JavaScript optional chaining(?.) operator works?

我正在研究新的 JS 可选链接?. 运算符。它可以帮助我们避免出现这样的错误,

TypeError: Cannot read property ‘x’ of undefined

你可以写

const obj = {a: 1};
console.log(obj?.b);

没有错误。如果 obj 对象中没有名为 b 的 属性,它将 return undefined。现在,这适用于第一级 (.) 运算符。但是如果我尝试这样的事情,

console.log(obj.b.c.d?.e);

这是一个错误,

Uncaught TypeError: obj.c is undefined // In firefox it throws obj.b is undefined.

但是如果我写,

console.log(obj.b?.c.d?.e);

return再次未定义。不应该是 returning Uncaught TypeError: obj.b.c is undefined 吗?

这是一些实施差距还是我在这里遗漏了什么?提前致谢。

现已解决。 @Ifaruki 的评论有正确的解释。

更新:它被称为“链接”运算符。它从左向右移动。如果它看到了?如果未定义,它会检查左边的值。如果是,它 return 未定义并停止向右移动。这意味着如果 b 已经未定义,它不会检查右侧的值

在下面的例子中,obj只有一个key a.

const obj = {a: 1};
console.log(obj?.b);

在上面的代码片段中,对象中没有 属性 b 因为它正在打印 undefined.

console.log(obj.b.c.d?.e);
console.log(obj.b?.c.d?.e);

即使在上面的代码中,同样的事情也会发生在对象没有键 b 的地方,因此它打印未定义。所以如果你想看到 obj.b.c 是未定义的,那么对象应该如下所示:

obj: {
    b: '123'
}

它被称为“链接”运算符。它从左向右移动。如果它看到 ?.,它会检查左值是否为 undefined。如果是,它 returns undefined 并停止向右移动。这意味着如果 b 已经是 undefined 它不会检查右侧的值