是否可以将可选链接与数组和映射(在 Javascript 中)结合起来?

IT技术 javascript reactjs ecmascript-next
2021-05-16 19:31:48

我最近了解了Javascript 中的可选链,并一直在 React/NodeJS 项目中使用它。效果很好。

我注意到我一直将它与数组一起使用map,即使没有考虑太多——这似乎是一种自然使用(这里items是一个数组,或者可能undefined

        {items?.map(postListItem => ....

也就是说,它会映射,如果items存在,但如果itemsundefined的,但会避免任何运行时错误,如果我打电话给mapundefined

尽管如此,我不知道这是否是可以接受的用途,或者我是否误用了可选链接。我搜索了一个答案,但到目前为止还没有找到,这让我怀疑我误用了它。任何信息非常感谢!

3个回答

请参阅此处有关typescript用法的答案。您需要一个数组空安全可选链接的句点。

    this.mostRecentMfaAttempt = this.verificationsAttempts?.content?.[0]

如何在 Typescript 中使用带有数组的可选链接?

使用可选链运算符进行对象属性访问

如果链接失败,则表达式的计算结果为undefined

当一个孩子被评估为 时undefined,它不会渲染

条件渲染已经是一种很常见的策略。以前,当您有一些可能是数组或可能是 的东西undefined,并且您想映射是否有数组时,您必须执行以下操作:

{ items && items.map( ...

这是有效的,因为如果itemsundefined,整个表达式将被评估为undefined,并且不会发生渲染,也不会抛出错误。

使用可选链的工作方式完全相同,只是它更简洁。所以是的,这是一件完全有效的事情。

可选链接是第 4 阶段,因此您可以指望它可靠地工作。

数组是对象但是可选链不仅适用于对象——它可以适用于任何可能具有属性或方法的东西。例如,const bar = foo?.toFixed(2)如果foonullundefined或数字(数字有一个toFixed方法)就可以正常工作

您的问题的可选链接方式是:

{items?.map?.(postListItem => ....)

在此处阅读更多信息:MDN Web 文档:可选链