NodeJS 中的空合并赋值运算符 (??=)

Ham*_*ada 13 javascript node.js

我正在尝试在 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;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

tri*_*cot 21

该错误意味着您的 Node 版本尚不支持该??=运算符。

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

在此输入图像描述


小智 8

节点版本 v15.14+ 是可能的。

重写类似的东西

a.greeting ??= "hello"
Run Code Online (Sandbox Code Playgroud)

在节点 <v15.14 中是:

a.greeting = a?.greeting ?? 'hello'
Run Code Online (Sandbox Code Playgroud)

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