ES6之解构赋值详解

831 阅读3分钟

什么是解构赋值?

在编码过程中,我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段,在ES6中允许按照一定模式,从数组对象中提取值,对变量进行赋值,称其为解构赋值 - 作用:是对变量进行赋值。 - 变量值的来源:是数组或对象。 - 规则:有一定的模式。

数组的解构赋值

1.按下标一一对应去赋值

2.左右数量不等,会相应的对号入座,没有的以undefined赋值

2.1.左边少于右边,右边多余的舍弃

2.2.左边多余右边,左边按位置少的undefined补充

3.多维数组解构赋值,左右两边多维数组的下标要相同,否则报错

4.左边跳过在赋值时相应位置同样跳过

5.有默认值时,如果右边相应位置有值,将被覆盖,否则取默认值

对象的解构赋值

let {name,age}=obj;做了两件事 - 定义了两个变量(name,age) - 给这两个变量赋值 当运行完成后,会多出两个变量--name,age

解构规则

- 1.解构规则:必须要通过键名进行关联。
- 2.没有键名就是undefined
- 3.对象的结构赋值的内部机制是先找到同名属性,然后赋值给相应的变量

1.按属性名一一对应关系进行赋值,左右顺序可打乱

2.默认值赋值,同数组

3.变量名与属性名不一致

以上可以看出,对象的解析赋值的内部机制,是先找到同名属性,然后在赋值给对应属性的变量,而不是赋值给对应属性,真正被赋值的是属性后的变量

4.圆括号的用法

如果在结构之前就已经定义了对象,解构时需要加圆括号

5.沿着原型链进行查找解构赋值

=号右边是一个空数组,它是一个对象,它自己没有一个名为push的属性,但它的隐式原型对象上有push属性,

6.函数参数中的解构赋值

上面的形参列表中**{lastname,age}相当于定义两个变量,通过对象的解构赋值给它们设置值,对应属性名同样必须相同才能被匹配到,否则是undefined**

字符串解析赋值

=号右边是个字符串,它没有length这个属性,但它的隐式原型对象上有,将这个属性赋给左边对象

解构赋值应用

1.交换变量的值

有两个变量:a,b,现在需要交换这两个变量值

1.1.常规方法:

1.2.解析赋值交换法

2.快速获取从函数中返回的多个值

同时可利用return一个对象来返回多个值

3.快速获取对象的属性值

综合作用:从一堆数据