var a ={};[(a.b)]=[3];
console.log(a);// {b: 3}
console.log(b);// 报错 b is not defined
9、({a: obj[a + b]} = {a: 2});
let a ='x', b ='y', obj ={};// {a: obj[a + b]} = {a: 2}; // 会报错({a: obj[a + b]}={a:2});// 需要加括号变成表达式
console.log(obj);// {xy: 2}
10、利用解构赋值进行 变量交换
let a =1, b =2;[b, a]=[a, b];
console.log(a, b);// 2 1
11、对象匹配允许匹配同源属性(同一个属性)
let{a: x,a: y}={a:1};
console.log(x, y);// 1 1
变量的解构就是变量的赋值,本质就是变量的模式匹配
模式匹配可以匹配同一个属性(同源属性)
12、★★ 慎用
var x =200, y =300, z =100;var obj1 ={x:{y:42},z:{y: z // 100}// y: x = { y: 300 }// z: { y: }}// x = {y : y}}是变量y的默认值;y属性在obj1里没有,是undefined,则找默认值 y是属性,值y从外层找({y: x ={y: y}}= obj1);// y: x = {y: 300}({z: y ={y: z}})// z: y = {y: 100}// obj1中有x的属性值 所以 z = x的属性值,即{y: 42} => {y: x} ({x: z ={y: x}})// x: z = {y: 42}
console.log(x.y, y.y, z.y);// 300 100 42