基本概念:本质上是一种匹配模式,只要等号两边模式相同,那么左边变量可以被赋予对应的值。
解构赋值主要分为:数组的解构赋值 、对象的解构赋值 、基本类型的解构赋值。
let [a,b,c] = [1,2,3];
console.log(a); //1
console.log(b); //2
console.log(c); //3
数组的解构赋值
let [a,[[b],c]] = [1,[[2],3]];
console.log(a); //1
console.log(b); //2
console.log(c); //3
let [,,d] = [4,5,6];
console.log(d); //6
let [x] = [];
console.log(x); //undefined
let [y=1] = [];
console.log(y); //1
//解构赋值里设置默认值
//这里a5设置默认值的情况
let [a1, a2, a3, a4, a5="hello"] = [1, 2, 3, 4]
console.log(a1) //1
console.log(a2) //2
console.log(a3) //3
console.log(a4) //4
console.log(a5) //hello
//以下是不设置默认值的情况
let [b1, b2, b3, b4, b5] = [1, 2, 3, 4]
console.log(b1) //1
console.log(b5) //undefined
//设置默认值却又有对应的情况
let [b1, b2, b3, b4, b5="hello"] = [1, 2, 3, 4, 5]
console.log(b1) //1
console.log(b5) //5
对象的解构赋值
let {a,b} = {b:'bbb',a:'aaa'};
console.log(a); //aaa
console.log(b); //bbb
let {c:d} = {c:1};
console.log(c); //ReferenceError: Can't find variable: c
console.log(d); //1
基本类型的解构赋值
let [a,b,c,d] = '1234';
console.log(a); //1
console.log(b); //2
console.log(c); //3
console.log(d); //4
let {length:len} = 'miaov';
console.log(len); //5
let {toString:ts} = 1;
let {toString:bs} = true;
console.log(ts === Number.prototype.toString); //true
console.log(bs === Boolean.prototype.toString); //true
// null和undefined不能进行解构赋值
let [a] = null; //TypeError: null is not an object (near '... let [a] = null;...')