1. 数组的解构赋值 ——看结构
概念:左边用数组把变量包裹起来和右边结构进行赋值,一般都用于数组结构
特殊情况:
1. 当右边个数小于左边个数时,依旧看结构取值,若左边多出的部分出现了...扩展运算符,就赋值为[ ],没有时就为undefined。...只能有一个并且位于最后;
2. 当左边个数小于右边个数时,依旧看结构取值
3. 结构默认值时,就为设置的默认值
4. 若等号右边不是数组,或者说不是可遍历接口的数据(除了字符串、数组、set、arguments、map外),会报错。
let [a,bb,c,d] = [1,2,3,55];
console.log(a,bb,c,d); //1 2 3 55
//情况1
let [e,f,g,...h] = [1,2,3];
console.log([e,f,g,h]); //[1, 2, 3, []]
let [o,p,q] = [1,2,];
console.log([o,p,q]); //[1, 2, undefined]
//情况2
let [i,j] = [1,2,3];
console.log([i,j]); //[1, 2]
//情况3
let [w=2] = [undefined];
console.log(w); //2
//情况4
let [r,s,t] = 'qwer';
console.log(r,s,t); // q w e
let [k,l,m] = { };
console.log([k,l,m]); //报错:{} is not iterable
2. 对象的解构赋值——看属性名
对象的简介表达式:当属性名和值是同一个时,就可以省略值,只写一个即可
变量必须与属性同名,才能取到正确值;右边没有左边的属性名,则取值为undefined
const {name,age} = {name:'xzq',age:40 };//对象的简介表达式,属性名和值一样时,只写一个
//name:xzq,age:40
const {name1,age1} = { name1:'lc',age2:33};
//name1:'lc',ag1:undefined
const {title} = {'asd'};
console.log(title); //报错
3. 函数参数的解构赋值 ——看参数
function multiply([x,y]){
return x*y;
}
console.log(multiply([1,3])); //3 x=1,y=3
//add的参数指定默认值,而不是x,y
let add = ({x,y} = {x:0,y:0})=>{
return `x=${x},y=${y}`;
};
console.log(add({x:2,y:3})); //x=2,y=3
console.log(add({x:2})); //x=2,y=undefined
console.log(add({})); //=undefined,y=undefined
//对abb的参数解构赋值,解构失败时为默认值
let abb = ({x=0,y=0} = { })=>{
return `x=${x},y=${y}`;
};
console.log(abb({x:2,y:3})); //x=2,y=3
console.log(abb({x:2})); //x=2,y=0
console.log(abb({})); //x=0,y=0