解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。但由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
let [a,b,c]=[1,2,,3]
//按照位置依次赋值
模式匹配
等号两边的模式相同就能按照位置依次赋值
数组解构赋值
let [a,[[b],[c]]]=[1, [ [2],[3] ] ]
let [ , , thrid] = [1,2,3]
//不完全解构
let [a,b] =[1,2,3]
//按位置匹配前两个
对象解构赋值
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
//解构的对象不能为undefined、null
const {a,b,c,d,e} = obj || {};;
const f = a + d;
const g = c + e;
const {a:a1} = obj;
嵌套对象解构赋值
let obj = {
p: ['Hello',{ y: 'World' }]
};
let {p: [x, { y }] } =obj;//p为模式,不做为对象赋值
let { p, p: [x, { y }] } = obj; //将p作为对象赋值
字符串解构赋值
const [a,b,c,d,e] = 'hello'
let { length:len } ="hello" //len 5
数值和布尔值的解构赋值
let {toString: s} = 123;
let {toString: s} = true;
数值布尔值包装对象都有 toString
先将右边转化成对象
函数参数解构赋值
function add([x, y]){
return x + y;
} add([1, 2]); // 3
[[1, 2], [3, 4]].map(([a, b]) => a + b);