代码之家  ›  专栏  ›  技术社区  ›  aalaap

ES2020空合并运算符(??)是否可用于检查未声明的变量?

  •  0
  • aalaap  · 技术社区  · 4 年前

    MDN :

    零合并算子( ?? )是一个逻辑运算符,当其左侧操作数为空时返回其右侧操作数 null undefined ,否则返回其左侧操作数。

    console.log(foobar ?? 555);
    // Uncaught ReferenceError: foobar is not defined
    

    如果我显式声明变量,它将起作用:

    let foobar;
    console.log(foobar ?? 555);
    // 555
    

    唯一的选择似乎是:

    console.log(typeof foobar !== 'undefined' ? foobar : 555)
    // 555
    

    未申报

    我知道有人反对为什么代码会检查一个没有声明的变量。例如,下面的函数接受一个参数而不为其指定默认值,使 ?? 似乎有用:

    const baz = (foobar) => (`${foobar ?? 555}baz`) // same as: const baz = (foobar = 555) => (`${foobar}baz`);
    baz()
    // 555baz
    

    这个场景是这个操作符的预期用途吗?如果是,那么也可以通过在签名中为参数指定一个默认值来提供服务,那么null合并操作符在有用性上有什么不同呢?

    注: 上面的语句在Node.js 14和Chrome 88中运行。

    0 回复  |  直到 4 年前