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?