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?
我编写了一个处理此问题的函数,以替代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属性访问(和条件分配)以获取更多参考
归档时间: |
|
查看次数: |
4343 次 |
最近记录: |