和问号相关的三个JS运算符

今天读代码时遇到之前没注意过的??运算符,查资料时顺藤摸瓜找到了??=,顺便归纳下之前遇到过的?.

参考

非空运算符??

  • 如果??左边参数不是 null/undefined,将返回左边参数,否则返回右边参数
  • 例子:
    1
    2
    null ?? 5 // => 5
    3 ?? 5 // => 3
  • ??被称为 非空运算符/空值合并运算符,增加了真正检查 空值 而不是 假值 的能力
    • JS 中假值:空对象 null、空数字 NaN、数值 0、未定义 undefined、空字符串''、布尔 false(有意思,除symbol外的值类型都有假值
    • 空值nullundefined
  • 使用场景:用于检查一个变量是否为空——即它是 undefined/null,例如变量什么时候可以有一个空字符串或一个假值。此时就需要??

逻辑赋值运算符??=

链判断运算符?.

  • a?.length来判断。只有a存在时才会走后面的length,完美避开a为null还去找长度而报错的情况
  • 如果a不存在(undefined)/为null,则a?.length返回 undefined
  • a?.length其实就相当于a && a.length