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
它不会检查右侧的值
我正在研究新的 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
它不会检查右侧的值