【问题标题】:Nullish coalescing assignment operator (??=) in NodeJSNodeJS 中的空值合并赋值运算符 (??=)
【发布时间】:2021-08-29 18:06:38
【问题描述】:

我正在尝试在 NodeJS 中使用 Nullish 合并赋值运算符 (??=),可以吗?

const setValue = (object, path, value) => {
  const indices = {
      first: 0,
      second: 1
    },
    keys = path.replace(new RegExp(Object.keys(indices).join('|'), 'g'), k => indices[k]).split('.'),
    last = keys.pop();

  keys
    .reduce((o, k, i, kk) => o[k] ??= isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}, object)[last] = value;

  return obj;
}
est.js:9
       .reduce((o, k, i, kk) => o[k] ??= isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}, object)
                                      ^

SyntaxError: Unexpected token '?'
        at wrapSafe (internal/modules/cjs/loader.js:1067:16)
        at Module._compile (internal/modules/cjs/loader.js:1115:27)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)
        at Module.load (internal/modules/cjs/loader.js:1000:32)
        at Function.Module._load (internal/modules/cjs/loader.js:899:14)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
        at internal/main/run_main_module.js:17:47

【问题讨论】:

  • 这意味着您运行的 Node 版本尚不支持该运算符。所以“有可能吗?”:不是那个版本的Node。

标签: javascript node.js


【解决方案1】:

该错误表示您的 Node 版本尚不支持 ??= 运算符。

node.green查看支持它的版本:

【讨论】:

    【解决方案2】:

    节点版本 v15.14+ 可以。

    类似的重写

    a.greeting ??= "hello"
    

    在节点

    a.greeting = a?.greeting ?? 'hello'
    

    也许它确实对某人有帮助:]

    【讨论】:

      【解决方案3】:

      您使用的节点版本不支持空值合并赋值运算符。

      【讨论】:

        【解决方案4】:

        你可以替换logical nullish assignment ??=

        o[k] ??= isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {}
        

        分配给logical OR ||

        o[k] = o[k] || (isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {})
        

        【讨论】:

        • ?? 不等同于 ||。例如0 ?? 1 将返回 0,但 0 || 1 将返回 1。
        • @Olian04,该注释与此处无关,因为对象o 完全由此reduce 调用控制,并且其属性始终是对象。
        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2020-12-01
        相关资源
        最近更新 更多