可选链运算符 [ ? ]
可选链接运算符(Optional Chaining Operator) 处于 ES2020 提案的第 4 阶段,因此应将其添加到规范中。它改变了访问对象内部属性的方式,尤其是深层嵌套的属性。它也可以作为 TypeScript 3.7 + 中的功能使用。
if (data && data.children && data.children[0] && data.children[0].title) {
// I have a title!
}
上面的代码用于 API 响应,必须解析 JSON 以确保名称存在 。但是,当对象具有可选属性或某些配置对象具有某些值的动态映射时,可能会遇到类似情况,需要检查很多边界条件。 这时候,使用可选链接运算符,使用 “?” 要检查空值的属性之后的运算符。我们可以随意在表达式中多次使用该运算符,并且如果未定义任何项,它将尽早返回。
对于静态属性使用方法
object?.property对于动态属性使用方法
object?.[expression]对于方法调用使用方法
object.runsOnlyIfMethodExists?.()
逻辑空分配 [ ??= ]
x ??= y
逻辑空值运算符仅在 nullish 值(null 或者undefined)时才将值分配给x
效果等同于
x ?? (x = y);
不等同于下面
x = x ?? y;
原因: 空的合并运算符(??)从左到右操作,如果 x 不为 nullish 值则中表达式不执行。因此,如果 x 不为null 或者 undefined,则永远不会对表达式y进行求值。如果y是一个函数,它将根本不会被调用。
逻辑或分配 [ ||= ]
此逻辑赋值运算符仅在左侧表达式为 falsy 值(虚值) 时才赋值。Falsy 值(虚值)与 null 有所不同,因为 falsy 值(虚值)可以是任何一种值:undefined,null,空字符串 (双引号 “”、单引号’’、反引号 ``),NaN,0。IE 浏览器中的 document.all,也算是一个。
x ||= y
效果等同于
x || (x = y)
逻辑与分配 [ &&= ]
此逻辑赋值运算符仅在左侧为真时才赋值
x &&= y
效果等同于
x && (x = y)
