【问题标题】:How to use optional chaining in Node.js 12如何在 Node.js 12 中使用可选链
【发布时间】:2021-10-31 03:07:34
【问题描述】:

可选链接 (obj?.param1?.param2) 似乎是一个很棒的功能,我真的很想看到它的实现,并最终摆脱嵌套的 ifs、任意函数以及这样一个简单的操作所不具备的东西。

但是有一个问题,它不起作用。我更新到节点 12 仍然报错:

var dude = res?.param?.params[0]
SyntaxError: Unexpected token '.'

var dude = res.param?.params[0]
SyntaxError: Unexpected token '.'

有什么问题?

我是否需要更改某些语言配置或下载库才能启用此功能?还是只是还没有出来?

【问题讨论】:

  • Stage 4。 Node.js 还不支持这个。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 我搜索了“nodejs 空传播”,最初找不到这个问题。希望这条评论能提高搜索能力。
  • 恐怕我对此无能为力。它有一个标签,但它与 Javascript 无关,并且会引起更多的混乱而不是做好事。
  • 节点版本 v14.2.0 现在支持可选链接。更新!
  • 太好了。感谢您提供信息。

标签: javascript node.js


【解决方案1】:

Node.js 版本 13 及更低版本当前不支持可选链接。它将在 Node.js 版本 14 和大多数浏览器中得到支持,因为它已移至第 4 阶段。目前,很少有平台支持它。您可以在给定的link 中找到支持可选链接的平台列表。您可以使用--harmony 标志启用可选。

【讨论】:

  • 2021 年 1 月:这仍然是为 nodejs 获取官方 docker 映像的代码沙箱网站中的一个问题。我不得不使用result && result.insertedCount === 1 ? { data: "success" } : { error: "fail" }
  • 如果您使用的是 esm,则在修复此票证之前,可选链将无法在 Node 14+ 上工作github.com/standard-things/esm/issues/866
【解决方案2】:

可选链接功能的规范刚刚在December 22, 2019 上升级为Stage 4 (Finished)。节点 12 在规范最终定稿之前就出现了 - 就此而言,节点 13 也是如此。

根据node.green,从节点 14 开始将支持可选链接,但仍需要--harmony 标志。 (这似乎与 Node 对 --harmony flag 的描述相冲突 - V8 的运输功能不应该需要标志 - 所以我不知道该怎么做。)不过,不管它是否需要标志,我在 April 2020 附近发布 Node 14 之前,不会期望看到该功能。

如果你今天想玩可选链,最好的办法是使用 TypeScript(added optional chaining in version 3.7)或像 Babel 这样的预处理器。

【讨论】:

    【解决方案3】:

    我能够使用带有 --harmony 标志的 nodejs v13.7.0。

    node --harmony myCode.js

    黛娜

    未定义

    未定义

    //myCode.js
    
    const adventurer = {
      name: 'Alice',
      cat: {
        name: 'Dinah'
      }
    };
    
    const catName = adventurer.cat?.name;
    console.log(catName);
    // expected output: Dinah
    const dogName = adventurer.dog?.name;
    console.log(dogName);
    //expected output: undefined
    
    console.log(adventurer.someNonExistentMethod?.())
    //expected output: undefined
    

    【讨论】:

      【解决方案4】:

      可选链接将使用 Node.js v14 实现,该版本将于 20/04/2020 发布。现在,你可以使用 Babel 和 @babel/plugin-proposal-optional-chaining

      【讨论】:

        【解决方案5】:

        如果您仍然遇到此问题,请检查您使用的节点版本node --version

        如果您有nvm,请确保您使用的节点版本实现了给出错误的运算符。

        例如

        nvm install 15.8
        nvm use 15.8
        

        【讨论】:

          猜你喜欢
          • 2019-08-27
          • 2020-03-02
          • 2021-05-13
          • 1970-01-01
          • 2016-04-15
          • 2011-05-17
          • 2022-11-01
          • 1970-01-01
          相关资源
          最近更新 更多