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

更多相关文章

  1. PHP简易计算器&封装函数练习
  2. php变量命名规则及赋值
  3. 08-03作业
  4. 模板字面量、标签函数、解构赋值与对象字面量的简化
  5. 0708作业 赋值和字面量简化 函数
  6. 对于模板字面量与标签函数、解构赋值于对象字面量的简化方式的理
  7. 模板字面量标签函数和解构赋值与对象字面量简化写法作业
  8. 模板字面量与标签函数,解构赋值
  9. 模板字面量与标签函数

随机推荐

  1. Android布局之LinearLayout
  2. Android之七 闪屏的实现
  3. Android Settings 设置中 PreferenceActi
  4. Android Activity 属性介绍
  5. android studio 的自动更新问题
  6. Android添加快捷方式(Shortcut)到手机桌
  7. Android之辅助服务下篇————Accessibi
  8. Android 设置EditText不会自动弹出键盘
  9. Android个人开发笔记
  10. Android studio 3.1.3 无法获取pom文件