资讯专栏INFORMATION COLUMN

ECMASCRIPT 6 实战之 解构赋值

yangrd / 1370人阅读

摘要:相信解构赋值自以下简称面世以来被大家快速地熟悉并运用到实际开发中了这是一种能有效减少代码量,使代码逻辑更简单优雅的技术下面我们就再来回顾总结一下解构赋值的种种用法吧基本用法从对象解构假设有一个对象,它的结构为以对称的形式从从边的对象中匹配与

相信解构赋值(Destructuring)自 ECMASCRIPT 6(以下简称 ES 6) 面世以来被大家快速地熟悉并运用到实际开发中了, 这是一种能有效减少代码量,使代码逻辑更简单优雅的技术, 下面我们就再来回顾、总结一下解构赋值的种种用法吧

基本用法

从对象解构

    假设有一个 AritleDetail 对象,它的结构为:
    const AritleDetail = {
        articleId: "at_001",
        authName: "mega_galaxy"
    }
    以 对称的形式从 从边的对象中匹配 articleId 与 authName 两个键的值
    const { articleId, authName } = AritleDetail;
    访问两个变量
    articleId // "at_001"
    authName  // "mega_galaxy"
    本质就是
    const articleId = AritleDetail["articleId"];
    const authName = AritleDetail["authName"];

从数组解构

    设定 数组 AritleDetail 的结构是这样:
    AritleDetail = ["2019-05-23", 1087];
    则解构 时会把数组 某位置的值 赋值 给左边 相同位置的 变量
    const [publishDate, wordSummary] = AritleDetail;
    实际上就是 
    const publishDate = AritleDetail[0];
    const wordSummary = AritleDetail[1];
    实际上就是在 取值(解构) 的同时,也设定了变量的值 (赋值),对比 ES5 的代码,相同的逻辑,代码量省不少,易读性更强,更简明扼要

但如果只是基本用法,在我们实际开发中是远远不够用的,我们需要更多丰富的用法,来方便我们的快速开发:

进阶用法

设定默认值

为解构的变量设定默认值,以防不测 : )

    假设后端返回的数据 AritleDetail 的结构长这样:
    const AritleDetail = {
        authName: "",
        publicshDate: undefined,
        content: null
    }
    这个 AritleDetail 也是苦命,要啥啥没有, 而且最重要的 content 还居然是个 null !!!,
    借助我们的 [设定默认值] 特性,可以巧妙地四两拔千金,轻松把后端扔过来的 garbage 化为小渣渣:
    const { authName = "未知作者", publicshDate = "2019-01-01", content = "文章内容为空"} = AritleDetail;
    有了默认值后, 我们就可以拿默认值作为渲染的兜底值了:
    
{ content }
渲染为: 文章内容为空 !Tips: undefined 与 null 会影响页面的渲染,对这类值的处理要尤其谨慎!

嵌套解构(多重解构)

当要从已解构的变量中再次取值时, 可使用多重解构

    如果后端返回的 列表页 数据 AritleDetail 的结构变成了这样:
    const AritleDetail = {
        code: 200,
        data: {
            articleId: "at_001",
            labels: ["javascript", "ES 6", "Destructuring"],
            detailInfo: {
                authName: "mega_galaxy",
                title: "ECMASCRIPT 6 实战之 解构赋值",
                publicshDate: "2019-05-23",
                abstract: "解构赋值之[多重解构]"
            }
        }
    }
    如果小明要用 articleId 去请求文章的详情数据该怎么做??
    结构这么复杂, 层级这么深,怎么办? 这可把我们小明急坏了...
    别急, [嵌套解构] 特性让你一招治敌:
    const { data: { articleId }} = AritleDetail;
    访问 articleId // at_001
    真的!好用!

那如果小明要同时使用 articleId 请求详情数据, 又要拿 detailInfo 中的 abstract 显示描述呢?

    const { data: { articleId, detailInfo: { abstract }}} = AritleDetail;
    访问 articleId // at_001
    访问 abstract  // 解构赋值之[多重解构]
    用到哪个取哪个, 层级再多也不怕,只要结构清晰我一样拿到它

那如果..., 多重解构可以很好玩, 更多更复杂的层级,就请同学们再自己多多探索...

    数组的多重解构,也是一样的好玩...
    const [[article1, article2, article3], summaryWords] = [["at_001", "at__002", "ar__003"], "666"];
    article1 // at_001
    article2 // at__002
    article3 // ar__003
    summaryWords // 666

重命名

给变量赋值时,重设变量的名字,并且旧的名字不能够再使用

    如果很不幸刚入门的后端小王返回了这样的一个数据, 而你想要的是驼峰命名法的变量时...
    AritleDetail = {
        code: 200,
        data: {
            articleid: "at_001",
        }
    }
    总不能重新构造一个变量,再改变量名字吧...
    [重命名] 特性让你 180 度大拐弯,过山车之后,便是从地狱直奔天堂的通途:
    const { articleid: articleId } = AritleDetail;
    在原来的变量之后加冒号 (:), 冒号后跟想要设定的新名字, 即可使用规范的驼峰规范的变量了~~~
    访问 articleId // at_001 ??!!!  这样也可以? yes ! so cool !
    再试着访问 articleid  // Uncaught ReferenceError: itemid is not defined
    完美

剩余参数(配合扩展运算符)

将未能解构出来的参数值放进[剩余参数]中,严格意义上来说,这不属于解构的特性,而是扩展运算符的特性,但为了实际开发的便利,就一起讲了,谁让它好使呢

    只取想要使用的第一个变量
    const labels = ["javascript", "ES 5", "ES 6", "React.js", "Vue.js", "Node.js", "React-Native"];
    const [target, ...rest] = labels;
    target // "javascript"
    rest   // ["ES 5", "ES 6", "React.js", "Vue.js", "Node.js", "React-Native"]
    
    对象也类似的写法
    const AritleDetail = {
        code: 200,
        data: {
            articleId: "at_001",
            labels: ["javascript", "ES 6", "Destructuring"],
            detailInfo: {
                authName: "mega_galaxy",
                title: "ECMASCRIPT 6 实战之 解构赋值",
                publicshDate: "2019-05-23",
                abstract: "解构赋值之[多重解构]"
            }
        }
    }
    const { data: { articleId, ...rest }, code } = AritleDetail;
    code        // 200
    articleId   // at_001
    rest        // 
                {
                    labels: ["javascript", "ES 6", "Destructuring"],
                    detailInfo: {
                        authName: "mega_galaxy",
                        title: "ECMASCRIPT 6 实战之 解构赋值",
                        publicshDate: "2019-05-23",
                        abstract: "解构赋值之[多重解构]"
                    }
                }
    我的心中只有 articleId 没有它,其它的都跟 rest 混去吧~~~

心之所至,金石为开,有了 [设定默认值] [多重解构] [重命名] [剩余参数] 四大绝技,平步江湖,无人能敌...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109788.html

相关文章

  • ES6学习手稿基本类型扩展

    摘要:它是一个通用标准,奠定了的基本语法。年月发布了的第一个版本,正式名称就是标准简称。结语的基本扩展还有一些没有在这里详细介绍。 前言 ES6标准以及颁布两年了,但是,好像还没有完全走进我们的日常开发。这篇文章从ES6的基本类型扩展入手,逐步展开对ES6的介绍。 ECMAScript和JavaScript JavaScript是由Netscape创造的,该公司1996年11月将JavaSc...

    tommego 评论0 收藏0
  • 带你入门 JavaScript ES6 (一)

    摘要:是国际组织于年月日发布的第六版,正式名为通常被成为或。二模版字面量提供一种简单实现表达式嵌套的字符串字面量操作,简而言之就是能够以简单的方法实现字符串拼接操作。 本文同步 带你入门 JavaScript ES6 (一),转载请注明出处。 ES6: 是 ECMA国际组织于 2015 年 6 月 17 日发布的 ECMAScript 第六版,正式名为 ECMAScript 2015,通常被...

    lindroid 评论0 收藏0
  • ECMASCRIPT 6 实战 扩展运算符

    摘要:扩展运算符是以下简称中又一非常好用的实战技术它的写法只需要三个点作用则顾名思义用来展开你想要使用的任意变量本质上是对所有拥有迭代器接口的对象进行迭代。 扩展运算符(spreading)是 ECMASCRIPT 6(以下简称ES 6) 中又一非常好用的实战技术, 它的写法只需要三个点(...),作用则顾名思义,用来展开你想要使用的任意变量,本质上是对所有拥有迭代器接口(Iterator)...

    habren 评论0 收藏0
  • ECMAScript6 新特性——“变量的解构赋值

    摘要:数组的解构赋值允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。如果变量名与属性名不一致,必须写成下面这样。 1 数组的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 基本用法 { var [a,[b,c],d,,...f] = [1,[2,3],4,5,6,7]; console...

    Eric 评论0 收藏0
  • ECMAScript 6入门读书笔记二

    摘要:变量的解构赋值更加便利的从匿名对象或者数组中,对变量进行赋值数组的解构赋值基本样式,右边数据类型必须是可迭代的类型。 变量的解构赋值 更加便利的从匿名对象或者数组中,对变量进行赋值; 数组的解构赋值 基本样式,右边数据类型必须是可迭代的类型。 let a = 1, b = 2, c = 3; //等价于 //let [a, b, c] = [1, 2, 3]; 对...

    wawor4827 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<