我为自己创建并回答此问题,因为谷歌搜索“ Javascript?。运算符”没有提供有用的结果。
关于?的问题。要回答的运算符:
例如,考虑此Perosn对象
let person = {
name : {
first : "John",
last : "Doe"
},
age : 31
}
我将使用此人的姓氏作为别名
let lastName = person.name.last;
这很盛大,但是如果名称对象不存在怎么办?那么代码的前行会抛出以下错误
未捕获的TypeError:无法读取未定义的属性'last'
要解决此问题,必须检查name属性以确保它存在。这会将我们简单的一个班轮变成以下代码
let lastName;
if(person.name){
lastName = person.name.last;
}
或
let lastName = person && person.name && person.name.last
第一个选项只是一个麻烦而第二个选项也不是很膨胀(我个人认为语法令人困惑。)作为一种解释,第二个选项是检查person是否为真,它将检查person是否为真。名称是真实的,如果是person.name.last将被保存到lastName中。
所以这是Null传播运算符的魔力,我可以将上述所有代码片段都重写为
let lastName = person?.name?.last
现在,如果person或name为null / undefined,lastName将设置为null / undefined,并且不会引发任何错误。对于高度嵌套的对象,这可以节省很多错误检查和代码行。
Typescript从3.7开始支持光学链接https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining