博客列表 >ES6 解构赋值

ES6 解构赋值

Lon
Lon原创
2021年09月29日 16:36:55542浏览

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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议