数组的解构
1.说明
可以理解为“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值,如果解构不成功,变量的值就等于undefined
2.基本用法
let [a, b, c] = [1, 2, 3];
3.进阶用法
let [foo, [[bar], baz]] = [1, [[2], 3]];
4.进阶用法2
let [head, …tail] = [1, 2, 3, 4];
5.默认值
解构赋值允许指定默认值:
let [foo = true] = [];
结果foo===true
对象的解构
1.说明
对象的解构与数组类似,但是:数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
2.基本用法
let { bar, foo } = { foo: “aaa”, bar: “bbb” };
3.进阶用法
如果对象解构的变量名与属性名不一致,那么必须做“重命名”:
let obj = { first: ‘hello’, last: ‘world’ };
let { first: f, last: l } = obj;
结果f===’hello’;l===’world’
字符串的解构
1.说明
字符串也可以解构赋值,此时,可以将字符串理解为类似数组的对象。
2.基本用法
const [a, b, c, d, e] = ‘hello’;
3.进阶用法
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
let {length : len} = ‘hello’;
结果:len===5
数值和布尔值的解构
1.说明
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象,然后使用对象的解构规则
2.基本用法
let {toString: s} = 123;
结果:s === Number.prototype.toString
函数参数的解构
1.说明
函数的参数也可以使用解构赋值,其规则与其他类型的解构一致
2.基本用法
function add([x, y]){
return x + y;
}
add([1, 2]);