JS 可选链与双问号
为了测试新语法,可以打开参考资料中的 MDN 链接,其中有在线编辑器,或者使用 Chrome console
前言
公司的代码中已经开始有 ?? 和 ?. 了,刚看到这些代码有点摸不着头脑,看完 MDN 也就了解个大概。
担心细枝末节被我忽略了,得空来整理一下
1. 可选链(Optional chaining) ?.
以前我们可能会写这样的代码:
const a = {
b: {
c: {
d: [1]
}
}
}
const data = (a && a.b && a.b.c && a.b.c.d) || []即为了确保不会报 cant read property from property, 我们需要添加很长的判断条件
有了,可选链之后,你可以这样:
示例一:
示例二:
示例三, 可选链与函数调用:
语法 func?.(args)
总结 可选链操作符使得:
当对象为 null 或者 undefined 时,读取对象的属性不会报错。
当函数为 null 或者 undefined 时, 调用该函数不会报错
如果遇到连续的属性访问时,可以使用多个可选链(坏处可能是被 babel 编译之后,代码量变多)
2. 双问号(Nullish coalescing operator) ??
left ?? right
当 left 为 null 或者 undefined 时,返回右边的值.
注意:
和 || 不一样的是,如果 left 为 '' 或者 0 或者 false, ?? 依然会返回 left 的值:
同样,它也有短路操作
3. 可选链与双问号
可选链允许使用 undefined?.xxx() 而不报错,当然不报错是一回事,它的返回结果还是 undefined.
因此,这种时候可以再配合双问号来设置默认值:
参考资料
Last updated
Was this helpful?