Javascript 是什么?操作员?

What is the Javascript ?. Operator?

我正在为自己创建和回答这个问题,因为谷歌搜索 "Javascript ?. Operator" 没有提供任何有用的结果。

关于 ? 的问题。要回答的运营商:

  1. 这个运算符叫什么?
  2. 接线员如何工作?
  3. 打字稿支持这个运算符吗?
  1. 这是空传播运算符(A.K.A。存在运算符)。使用运算符称为可选或条件链接。
  2. 当必须访问中间属性可能是 null/undefined.
  3. 的对象的深度嵌套正确值时,此运算符很有用

例如考虑这个人物对象

let person = {
  name : {
     first : "John",
     last : "Doe"
  },
  age : 31
}

我会访问此人的姓氏

let lastName = person.name.last;

这一切都很好,但是如果名称对象不存在怎么办?那么前面的代码行会抛出以下错误

Uncaught TypeError: Cannot read property 'last' of undefined

要解决此问题,必须检查名称 属性 以确保它存在。这会将我们简单的一行变成下面的代码

let lastName;
if(person.name){
 lastName = person.name.last;
}

let lastName = person && person.name && person.name.last

第一个选项比较麻烦,第二个选项也不大。 (我个人认为语法很混乱)为了解释第二个选项是检查人是否真实如果是,它将检查 person.name 是否真实,如果是 person.name.last 将被保存进入姓氏。

这就是 Null Propagation Operator 的神奇之处,我可以将上述所有代码片段重写为

let lastName = person?.name?.last

现在如果人或名字是 null/undefined lastName 将被设置为 null/undefined 并且不会抛出错误。对于高度嵌套的对象,这可以节省大量错误检查和代码行。

  1. 这在技术上只是提议的 ES7 更改 (https://github.com/tc39/proposal-optional-chaining),但如果您在任何 chromium 浏览器的控制台中尝试它,它就会起作用。

Typescript 从 3.7 开始支持可选链接 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining