有没有像javascript中的swift可选链接?

Mon*_*key 18 javascript optional swift

我在javascript中一直在做很多像这样的代码

if (params && params.profile && params.profile.address && params.profile.address.default)

我必须检查每个可选项,它变得相当繁琐.在javascript中有更好的方式,类似于swift如何处理选项,例如

if let checked = params?.profile?.address?.default?

Joh*_*ery 6

我编写了一个处理此问题的函数,以替代YangMinYuan的答案:

function getSafe (func) {
    try {
        return func()
    } catch (e) {
        if (e instanceof TypeError) {
            return undefined
        } else {
            throw e
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样称呼它:

if (getSafe(() => params.profile.address.default))
Run Code Online (Sandbox Code Playgroud)

之所以起作用,是因为通过将其包装在匿名函数中,直到try / catch块才对其进行评估,然后try / catch块将捕获错误并undefined在未定义任何父属性的情况下返回。

检查是否e为a TypeError可防止其吞下该函数可能引发的任何其他错误,以便仍可以根据需要进行处理。如果您希望它只返回undefined任何错误,则可以删除该部分:

function getSafeNoErrors (func) {
    try {
        return func()
    } catch {
        return undefined
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

原生JS中没有这样的运算符.

但是,有一个Babel插件可以实现这一点,请查看https://github.com/davidyaha/ecmascript-optionals-proposal

另外,请参阅ES6/2015中的Null-safe属性访问(和条件分配)以获取更多参考