javascript - javascript 中有类似快速可选链接的东西吗?

标签 javascript swift option-type

我已经在 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/

相关文章:

javascript - 用于 php 脚本的 AJAX

javascript - ClearInterval不会停止

javascript - angularJS 在 Controller 中设置路由参数

ios - 快门声卡顿

ios - Xcode 11, swift : Warning Can't end BackgroundTask on open URL

java - 可选的什么相当于Optional.empty()?或者,更好的写法

Javascript - 如果 anchor 也有名称属性,则 getElementById 失败

ios - 在 cellForRowAtIndexPath 中使用 PFQuery

swift - 如何在 Swift 中处理 launchOptions : [NSObject: AnyObject]??

swift - Realm 中的可选整数