博主信息
博文 33
粉丝 0
评论 0
访问量 64077
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
ES6 解构赋值
Lon
原创
755人浏览过

ES6 解构赋值

概述

解构赋值是对赋值运算符的扩展。
他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

为何要使用解构操作?

是因为 JSON 格式的普及,导致大量数据提取工作;
而这种提取过程,在 ES6 的解构语法中,带来了极大的便捷性;

一、数组解构

数组解构赋值,有两种基本的写法:1.分行解构;2 单行解构;

  1. let info = ['Mr.Lon', 18, '男']; //数组赋值
  2. let [name, age, gender] = info; //数组解构赋值
  3. info = ['Mr.Lon', 18, '男'],
  4. [name, age, gender] = info; //同上
  5. [name, age, gender] = ['Mr.Lon', 18, '男'];
  6. console.log(name);

从上面的例子分行或单行,都可以确定必须一一完美匹配才可以正确赋值;

1、数组层次也需要匹配(可嵌套)

  1. let [name,[age,gender]] = ['Mr.Lon',[18,'男']];

2、用逗号作为占位符不赋值(可忽略)

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

3、在变量解构时,可以在数组的元素中设置一个默认值(解构默认值)

  1. //当 gender 没有赋值时,采用默认值
  2. let [name,age,gender = '男'] = ['Mr.Lon',18];

4、还有一种…var 的语法,可以将没有赋值的内容都赋值给这个变量(剩余运算符)

  1. let [name,...other] = ['Mr.Lon',18,'男'];

二.对象解构

1. 对象的解构方式和数组大同小异,定义一个对象字面量,然后解构赋值

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 18,
  4. }
  5. //解构对象至变量
  6. let {name , age} = obj;
  7. //直接输出变量
  8. console.log(name)
  9. console.log(age)
  10. // 对象的解构也支持单行的简写模式,具体如下
  11. let {name , age} = {name : 'Mr.Lon' , age : 18}

2、在对象字面量里,还嵌套了对象,解构时也用相同的方法是解开即可(可嵌套)

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 18,
  4. info : {
  5. id : 1,
  6. gender : '男'
  7. }
  8. }
  9. let{info : {id,gender}} = obj;
  10. console.log(gender)

3、对象变量解构也可以设置一个默认值,在没有赋值时输出默认值(解构默认值);

  1. let obj = {}
  2. let {name,age,gender = '女'} = obj;
  3. console.log(gender) //如果没有默认值则undefined

4、如果不想要对象属性名作为解构变量,可以通过键值对的方式更改变量名(使用别名,防止命名冲突);

  1. let {name : myName , age : myAge} = obj; //name失效

5、剩余运算符

  1. let { ...r } = { a: 1, b: 2, c: 3 };
  2. console.log(r);//{a: 1, b: 2, c: 3}

三、其它解构

ES6 除了提供对象和数组解构外,还提供了很多适用的解构方案;

1、如果你想要让个普通变量的值进行交换,不必需要第三个变量参与;

  1. let key = 1;
  2. let value = 'Me.Lon';
  3. //解构操作,变量互换
  4. [key , value] = [value , key];
  5. console.log(key);//Me.Lon
  6. console.log(value);//1

2、如果函数的返回值是一个数组或对象,直接将函数进行赋值解构;

  1. function fn(){
  2. return ['Mr.Lon',18,'男'];
  3. }
  4. let [name , age , gender] = fn();
  5. function fn2(){
  6. return{
  7. name : 'Mr.Lon',
  8. age : 18,
  9. gender : '男'
  10. }
  11. }
  12. let {name , age , gender} = fn2();

3、当函数进行参数传递的时候,可以进行数组和对象字面量方式的传参;

  1. function fn([name,agae,gender]){
  2. console.log(name);
  3. }
  4. fn(['Mr.Lon',18,'男']);
  5. function fn2({name,age,gender}){
  6. console.log(name);
  7. }
  8. fn2({
  9. name : 'Mr.Lon',
  10. age : 18,
  11. gender : '男'
  12. })

4、除了对象和数组可以使用解构,字符串类型的数据也可以解构

  1. let [x,y,z] = 'ABC';
  2. console.log(x);//A
  3. let {length : len} = 'ABC'; //长度
  4. console.log(len); //输出3
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学