一、数组的解构赋值
分类:
- 完全解构:模式完全匹配,左侧数组中的变量都能找到刚好对应的值(完全对应)
- 不完全解构:左侧数组的模式只能匹配一部分的等号右侧的数组。(右侧有多余)
- 解构不成功:左侧数组中存在变量找不到对应值的情况,这部分变量的值为默认值。(左侧有多余)
- 解构出错:右边不是可遍历的结构(对应出错)
默认值:
[]
等同于[undefiend]
let [x = f()] = [1];
等价于
let x;
if([1][0] === undefiend){
x= f();
}else{
x=[1][0];
}
二、对象的解构赋值
与数组之间的区别:
数组的元素按次序进行模式匹配,对象的元素按属性名进行匹配
理解:
let {foo,bar} = {foo:”aaa”,bar:”bbb”};
等价于
let {foo:foo,bar:bar} = {foo:”aaa”,bar:”bbb”};
通过属性名找到对应关系,将属性名后的变量与值对等起来。
分类:
- 完全解构:变量名完全对应(完全对应)
- 不完全解构:部分值多余(右侧有多余)
- 解构不成功:部分变量找不到对应值,设置为默认值(左侧有多余)
- 解构出错:嵌套对象,自对象所在的父属性不存在
默认值:
let {x = 3} = {};
等同于
let {x = 3} = {x:undefiend};
注意
数组是特殊的对象,可以进行对象属性解构,元素名为位置Index
三、字符串的解构赋值
字符串转成数组进行解构
四、数值和布尔值的解构赋值
规则:等号右边的值不是对象或数组就先转为对象