ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
数组的解构赋值
- 数组的元素是按次序排列的,变量的取值由它的位置决定
- 解构失败,变量的值等于undefined
- 等号右边不是数组(严格地说不是可遍历结构),会报错
- 允许指定默认值,数组成员严格等于undefined,默认值才会生效
对象的解构赋值
- 对象的属性没有次序,变量必须与属性同名,才能取到正确的值
- 解构失败,变量的值等于undefined
- 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是属性值,而不是属性名
- 解构模式是嵌套的对象,而子对象所在的父属性不存在,将会报错
- 对象的解构赋值可以取到继承的属性
- 允许指定默认值,对象的属性值严格等于undefined,默认值才会生效
字符串的解构赋值
- 字符串被转为了一个类似数组的对象
- 类似数组的对象都有一个length属性,因此可以对这个属性解构赋值
数值和布尔值的解构
- 解构赋值时,如果等号右边是数值和布尔值,会先转为对象
- 解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值会报错
函数参数的解构赋值
类似于数组和对象的解构赋值
圆括号问题
- 不能使用圆括号的情况
- 变量声明语句
- 函数参数
- 赋值语句的模式
- 可以使用圆括号的情况
- 赋值语句的非模式部分,可以使用圆括号
用途
- 交换变量的值
- 从函数返回多个值
- 函数参数的定义
- 提取JSON数据
- 函数参数的默认值
- 遍历Map结构
- 输入模块的指定方法