最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • ES的语法糖-babel的可选链和双问号语法

    正文概述 掘金(用户9919760276484)   2021-06-11   962

    ES的语法糖-babel的可选链和双问号语法

    前言

    ES全称为ECMAScript,是JavasSript的一种语言标准。ECMAScript发布新语法规范需向TC39委员会提案,任何人都可以向其会提案。TC39由包括许多浏览器厂商在内的各方组成,提案需要经历五个阶段,每个阶段的变动都需要由TC39委员会批准(传送门:TC39),如下: Stage 0: strawman——最初想法的提交。 Stage 1: proposal(提案)——由TC39至少一名成员倡导的正式提案文件,该文件包括API事例。 Stage 2: draft(草案)——功能规范的初始版本,该版本包含功能规范的两个实验实现。 Stage 3: candidate(候选)——提案规范通过审查并从厂商那里收集反馈 * Stage 4: finished(完成)——提案准备加入ECMAScript,但是到浏览器或者Nodejs中可能需要更长的时间。

    可选链 —— Optional chaining

    一般场景

    data() {
        return {
          obj: {
            userInfo: {
              name: "hzq",
              tel: "1234567778",
              other: { name: "hzq2", title: "名字" }
            },
            title: "哈哈"
          },
       }
     }
    //获取对象内部的other对象的name属性值值
    mounted(){
    	console.log(this.obj && this.obj.useInfo && this.obj.userInfo.other && this.obj.userInfo.other.name)
    }
    

    在取到obj.userInfo.other.name之前,要确保obj.userInfo和obj.userInfo.other不是null或者undefined,否则会报错:Cannot read property 'name' of undefined 有了语法链,沃恩就可以摒弃这种臃肿的写法了。

    使用场景

    let body = {
        value: {
            a: '123321'
        }
    }
    let flag = body ? body.value : undefined
    // 相当于
    let result = body?.value
    console.log(result);
    
    //  实际
    let select = {
        value: {
            a: null
        }
    }
    let entirely = select?.value?.a || 100
    // 这句话的意思是如果 select和select.value和select.value.a 都为null或undefined时 entirely等于100
    console.log(entirely)
    // 如果 a = 0的话 entirely也要等于100 只能像下面这样写了
    
    let over = select.value.a === null ? 100 : select?.value?.a
    

    如果body或select其一是nullundefined的话,它就直接返回undefined,不往后执行了,避免了语法报错的风险。它不仅可以针对对象,还可以针对数组:

    function getLeadingActor(movie) {
      if (movie.actors && movie.actors.length > 0) {
        return movie.actors[0].name
      }
      //相当于
      return movie.actors?.[0]?.name
    }
    

    双问号 —— nullish coalescing

    使用场景: 取默认值

    let res = {
      data: {
        content: null, // or false, or 0,
        content1: false,
        content2: 0
      }
    }
    // 加上默认值
    const tableList = res?.data?.content || [4,5,6]  //[4,5,6]
    // 但我们发现,对于||,返回false或者0,也会取后者
    const tableList = res?.data?.content1 || [4,5,6]  //[4,5,6]
    const tableList = res?.data?.content2 || [4,5,6]  //[4,5,6]
    

    当遇到接口返回的数据中,content很可能为null 或者 undefined,或压根没返回content,因此我们判断时需要加上默认值。

    const tableList = res?.data?.content ?? [4,5,6]  //[4,5,6]
    const tableList = res?.data?.content1 ?? [4,5,6]  //false
    const tableList = res?.data?.content2 ?? [4,5,6]  //0
    

    项目使用

    目前vue3.0后的搭建可以直接使用可选链和双问号。旧项目的话需要借助插件解析可选链和双问号写法: babel-plugin-proposal-optional-chaining 插件可以帮助我们将可选链式的代码转化

    1. 检查项目package.json的babel-core版本是否是7.x

    ES的语法糖-babel的可选链和双问号语法 为了让你更方便的升级到babel 7,官方提供了一个工具babel-upgrade,对于已有的项目,只需要运行一行命令就可以升级到7版本以上了。 运行命令:npm babel-upgrade --write --install 注: 如·安装过程中出现以下命令: ES的语法糖-babel的可选链和双问号语法 请执行以下代码: npm install --save @babel/runtime-corejs2 如没问题,那继续:

    1. 安装依赖:

    npm install --save-dev @babel/plugin-proposal-optional-chaining -S

    然后.babelrc或者babel.config.js中这注入这个插件: ES的语法糖-babel的可选链和双问号语法 注:编辑器是vscode的话,需要在vscode的setting中配置: javascript.validate.enable": false 这就配置好啦!~ 想使用双问号的同学那就注入这段代码: ES的语法糖-babel的可选链和双问号语法 欢迎关注我的博客: juejin.cn/user/246754…

    github地址: github.com/NurTuam

    多多支持!本人会持续更新哒 ❤️


    起源地下载网 » ES的语法糖-babel的可选链和双问号语法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元