是否有检查嵌套属性存在的快捷方式[重复]
Posted
技术标签:
【中文标题】是否有检查嵌套属性存在的快捷方式[重复]【英文标题】:Is there a shortcut to check nested property existence [duplicate] 【发布时间】:2017-06-05 16:56:29 【问题描述】:我不知道是否设置了a.b
。只有当a.b[0].c
为真时,我才想做某事。我可以这样做:
if (a.b && a.b[0] && a.b[0].c)
// ...
是否有检查嵌套存在的快捷方式?我可以简化这种情况吗?
【问题讨论】:
我认为这是做你想做的最清晰、最简洁的方法。这就是为什么我如此喜欢coffeescript。在 CS 中,您只需说if a?.b?[0]?.c then ...
。我真的希望未来的 javascript 版本能包含更多的咖啡脚本的简单性。
【参考方案1】:
我曾经编写高尔夫代码,我们使用的技巧之一如下。
(myArray || [])[0] || 0
首先,评估myArray || []
,如果myArray 存在,则返回它,如果不存在,则返回一个空数组。假设 myArray 没有定义。接下来,[][0] || 0
表达式被求值,因为 [][0]
未定义,所以返回 0。
在您的情况下,它可以通过以下方式使用:
((a.b || [])[0] || ).c ||
如果某些内容未定义,则返回一个空对象。
我并不是说你应该使用这个(事实上,你不应该),我只是想告诉你,有一个更小的解决方案。
更新:
如果tc39 成功,那么您将使用可选链接获得更好的解决方案:
a.b?[0]?.c
【讨论】:
我喜欢这个,但不能赞成它,因为我不认为它是一个实用的解决方案,因为它在浏览代码时很难阅读。但是多么漂亮的单线解决方案! 哈哈,我也喜欢这个:) @jusopi 这可能属于黑客类别。以上是关于是否有检查嵌套属性存在的快捷方式[重复]的主要内容,如果未能解决你的问题,请参考以下文章