javascript 中的可选链式调用
来源:zidea     阅读:432
微上宝科技
发布于 2019-02-24 21:35
查看主页

资源参照 Fun Fun Fucntion, 这里对作者表示感谢!

const user = { name:'zideajang'}const zip = user?address?.zipconsole.log(zip)

这个符号我在 kotlin 中见过,可能 c# 中也有相应的符号吧。假如我们现在运行肯定会报错,即便我们去掉?其实有时候学习一门新的语言,并不肯定马上就会用上,或者者以后也不会用上,但是至少新的语言为我们开了一扇新的大门,我们更多的见识,而后将少量语言的好的特性融入我们的开发中。

这个将在不久将来 javascript 版本中给与支持,不过现在我们也可以体验这个特性。

当然我们通过逻辑来达到这个目的,

const user = { name:'zideajang'}const zip =     user &&    user.address &&    user.address.zip console.log(zip)

也可以这样做,像这样代码块我们应该随手不加思索地写出来。

const user = { name:'zideajang'}const zip =     user         ?undefined        : user.address            ? undefined            : user.address.zipconsole.log(zip)

还可以这样

onst user = { name:'zideajang'}let ziptry {    zip = user.address.zip} catch (error) {    zip = undefined}console.log(zip)

当然可以写一个方法来实现这个样功能,开始动手造轮子。

function get(obj, ...props){    const val = obj[props[0]]    if(props.length === 1 || !val) return val    const rest = props.slice(1)    return get.apply(null,[val,...rest])}const user = { name:'zideajang'}const zip = get(user,'address','zip')console.log(zip)

我们也可以引用第三方库来实现,这个 ramda 我还是第一次接触,准备以后研究少量。用起来也非常简单。

const R = require('ramda');const user = { name:'zideajang'}const userWithAdress = { name:'zideajang',address:{zip:2019}}// const zip = get(user,'address','zip')console.log(R.path(['address','zip'],user))console.log(R.path(['address','zip'],userWithAdress))

暂时我们还无法向 kotlin 那样进行可选调用,经过再三考虑最终使用

const zip = get(user,'address','zip')

这种方式还是最佳的可选链式调用,期望在新的版本中我们找到?这个链式可选调用操作符,这样我们就不用自己造轮子了。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
「大数据」Apache大数据项目目录
Python高级技巧:用一行代码减少一半内存占用
.NetCore利使用BlockingCollection实现简易消息队列
人在江湖漂,哪能不配刀?影刀2.X新版本全面详情
架构选型,到底啥时候选redis?
首页
搜索
订单
购物车
我的