如何在Node.js 12中使用可选链接


17

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

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

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

要么

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

问题是什么?

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


2
它在Stage 4。Node.js尚不支持此功能。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
斯瑞达

我搜索“ nodejs null传播”,最初找不到此问题。希望此评论将改善可搜索性。
卡西米尔

恐怕对此我无能为力。有一个标签,但是它与Javascript不相关,并且会引起混乱而不是行善。
almarc

Answers:


17

当前,Node.js版本13及以下版本不支持可选链接,Node.js版本14和大多数浏览器将其移至后将支持该链接Stage 4。当前,很少有平台支持它,您可以在给定链接中找到支持可选链的平台列表。您可以启用可选使用--harmony标志。


10

可选链接功能的规范刚刚于201912月22日升级到第4阶段(已完成)。节点12在规范最终制定之前就已经出现了-对此,节点13也是如此。

根据node.green,从节点14开始将支持可选链接,但仍需要该--harmony标志。(这似乎与Node对--harmony标志的描述相冲突-不应该使用V8的运输功能标志-因此我不确定该怎么做。)但是,无论是否需要标志,我都不会期望在2020年4月左右的Node 14之前看到该功能。

如果您今天想使用可选链接,最好的选择是使用TypeScript(在3.7版中添加了可选链接)或像Babel这样的预处理器。


10

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

节点--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(catName);
//expected output: undefined

console.log(adventurer.someNonExistentMethod?.())
//expected output: undefined

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.