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

Cer*_*ean 11 javascript reactjs ecmascript-next

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

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

        {items?.map(postListItem => ....
Run Code Online (Sandbox Code Playgroud)

也就是说,它将映射 ifexists items,但不会映射 if itemsis ,但如果我要调用undefined,它将避免任何运行时错误mapundefined

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

Mat*_*yne 16

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

    this.mostRecentMfaAttempt = this.verificationsAttempts?.content?.[0]
Run Code Online (Sandbox Code Playgroud)

如何在 Typescript 中使用可选链与数组?

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

  • 也许值得注意的是,如果数组存在但为空,则会崩溃。 (2认同)

Cer*_*nce 4

如果链接失败,表达式将计算为undefined

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

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

{ items && items.map( ...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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