最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 阮一峰《ES6 教程》总结系列(二)--变量的解构赋值

    正文概述 掘金(IsolateActors)   2021-02-06   668

    变量的解构赋值

    1.数组的解构赋值

    基本用法

    • 从数组和对象中提取值,对变量进行赋值,这被称为解构

      • 从数组中提取值,按照对应位置,对变量进行赋值。

        let [a, b, c] = [1, 2, 3];

    • “模式匹配”,只要等号两边的模式(结构)相同,左边的变量就会被赋予对应的值。

      • 如解构不成功,变量的值就等于undefined
      • 不完全解构,即等号左边的模式,只匹配等号右边数组的一部分
      • 等号的右边不是可遍历结构的或者在转为对象以后不具备 Iterator接口的,将会报错
      • 只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值

    默认值

    • 解构赋值允许指定默认值

      • 只有当一个数组成员严格等于undefined,默认值才会生效

      • 一个数组成员如果是null,则其默认值不会生效

      • 默认值如果是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候才会求值

      • 默认值可以引用解构赋值的其他变量,但该变量必须已经声明

        let [x = y, y = 1] = []; // 报错

    2.对象的解构赋值

    解构不仅可以用于数组,还可以用于对象。

    • 对象的属性没有次序,变量必须与属性同名,才能取到正确的值

      let { foo, bar } = { foo: 'aaa', bar: 'bbb' };

    • 解构失败,变量的值等于undefined

    • 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量

      let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
      baz // "aaa"
      foo // error: foo is not defined
      
    • 与数组一样,解构也可以用于嵌套结构的对象

    • 解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错。

      let {foo: {bar}} = {baz: 'baz'}; // 报错

    • 对象的解构赋值可以取到继承的属性

    默认值

    • 对象的解构也可以指定默认值

      • 生效的条件是对象的属性值严格等于undefined
      • nullundefined不严格相等,所以会导致默认值不生效。

    注意点

    • 将整个解构赋值语句,放在一个圆括号里面,避免 JavaScript 将其解释为代码块。
    • 解构赋值允许等号左边的模式之中不放置任何变量名。
    • 数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

    3.字符串的解构赋值

    • 字符串也可以解构赋值,被转换成了一个类似数组的对象

      • 类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值
        let {length : len} = 'hello';
        len // 5
        

    4.数值和布尔值的解构赋值

    • 等号右边是数值和布尔值会先转为对象

      • 只要等号右边的值不是对象或数组,就先将其转为对象
      • 由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。

    5.函数参数的解构赋值

    • 函数的参数也可以使用解构赋值

      • 函数参数的解构也可以使用默认值。
      • undefined就会触发函数参数的默认值。

    6.圆括号问题

    只要有可能导致解构的歧义,就不得使用圆括号

    • 建议只要有可能,就不要在模式中放置圆括号。

    • 不能使用圆括号的情况

      • 变量声明语句
      • 函数参数
      • 赋值语句的模式
    • 可以使用圆括号的情况

      • 赋值语句的非模式部分,可以使用圆括号。

    7.用途

    • 交换变量的值:[x, y] = [y, x];

    • 从函数返回多个值:返回数组或对象进行解构

    • 函数参数的定义:将一组参数与变量名对应起来

    • 提取 JSON 数据:提取 JSON 对象中的数据

    • 函数参数的默认值:指定参数的默认值

    • 遍历 Map 结构:for...of遍历Iterator接口的对象进行解构赋值,获取键名和键值

    • 输入模块的指定方法:导入模块时指定输入方法

    思维导图

    阮一峰《ES6 教程》总结系列(二)--变量的解构赋值


    起源地下载网 » 阮一峰《ES6 教程》总结系列(二)--变量的解构赋值

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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