【发布时间】:2018-04-08 03:02:12
【问题描述】:
我想知道在以下情况下如何检查未定义的属性?
let foo = {
bar: {
f: {
b: 90
}
}
}
我觉得有点
foo.bar && foo.bar.f && foo.bar.f.b ? foo.bar.f.b : null
也许可行,但我相信存在更好的方式。
【问题讨论】:
-
所以如果我理解正确,您的解决方案可能有效,但您不确定,您正在寻找更好的方法。对吗?
-
它被标记为重复,但万一有人到达这里,我会在这种情况下使用:
((foo.bar||{}).f||{}).b||null -
@Piyin 处理太多了。简单的方法可以是
try { return foo.bar.f.b } catch(ex) { return null }。这使代码简单易读 -
@Rajesh 起初我认为你是对的,但我做了一个性能测试,看起来
try...catch只有在嵌套超过九层后才能获胜:jsfiddle.net/0o3ag3t6/1 我可能是错的,尽管。所以如果你发现任何缺陷,请告诉我 -
@Piyin 请使用 jsperf 检查性能。使用 1 或 2 个案例不会给您带来实际的结果。我在手机上,所以我会在一两天内分享一个链接
标签: javascript typescript