1.数组的解构赋值
let [a,b,c]=[1,2,3];
let [foo,[[bar],baz]]=[1,[[2],3]];
foo //1
bar //2
baz //3
let [ , , third]=["foo","bar","baz"];
thrid //"baz"
let [x, , y]=[1,2,3];
x//1
y//3
let[head, ...tail]=[1,2,3,4];
head //1
tail //[2,3,4]
let[x,y, ...z]=['a'];
x//'a'
y//undefined
z//[]
如果解构不成功,变量的值为undfined
let [x, y]=[1];
let [y]=[];
//解构不成功,y都是undfined
不完全解构
let [x,y]=[1,2,3]
x//1
y//2
即为当左边的变量多,则是解构不成功
当右边的值多。则是不完全解构
2.对象的解构赋值
let {foo,bar}={foo:'aaa',bar:'bbb'};
foo //'aaa'
bar //'bbb'
let {bar,foo}={foo:'aaa',bar:'bbb'};
foo //'aaa'
bar //'bbb'
let {baz}={foo:'aaa',bar:'bbb'};
baz//undefined
等号左边的两个变量的次序与等号右边的两个同名属性的次序不一致,但是对取值无影响
若变量名无对应的同名属性,则取不到值,最后等于undefined
若变量名与属性名不一致,必须写成下面这样
let {foo:baz}={foo:'aaa',bar:'bbb'}
baz//'aaa'
解构嵌套解构的对象
let {p:[x,{y}]}={p:[hellow.{y:'world'}]};
x//'hello'
y//'world'