我已经在 javascript 中编写了很多这样的代码
if (params && params.profile && params.profile.address && params.profile.address.default)
我必须检查每个可选的地方,这变得非常乏味。 javascript 中是否有更好的方法类似于 swift 处理可选值的方式,例如
if let checked = params?.profile?.address?.default?
最佳答案
Optional chaining has now been added to the language使用与 Swift 相同的 ?.
语法,所以我建议这样做,除非您需要支持旧版浏览器。
如果你这样做,我已经写了一个函数来处理这个:
function getSafe (func) {
try {
return func()
} catch (e) {
if (e instanceof TypeError) {
return undefined
} else {
throw e
}
}
}
这样调用它:
if (getSafe(() => params.profile.address.default))
这是有效的,因为通过将它包装在一个匿名函数中,直到 try/catch block 才会对其进行评估,然后如果任何父属性未定义,它将捕获错误并返回 undefined
.
检查 e
是否为 TypeError
可防止它吞下函数可能抛出的任何其他错误,以便仍可根据需要处理这些错误。如果您希望它在出现任何错误时只返回 undefined
,您可以删除该部分:
function getSafeNoErrors (func) {
try {
return func()
} catch {
return undefined
}
}
关于javascript - javascript 中有类似快速可选链接的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757931/