let obj ={loc:{start:{line:1,column:2}}}let{ loc ,loc:{start:{line}}}= obj;
console.log(loc,line);
对象的嵌套解构赋值
let obj ={};
let arr =[];({a:obj.a,b:arr[0]}={a:'aaa',b:true});// obj:{a:'aaa'}// arr[0]:[true]// 如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错,如下:let{foo:{bar}}={baz:'baz'};
var{x =3}={};
x // 3var{x, y =5}={x:1};
x // 1
y // 5var{x: y =3}={};
y // 3var{x: y =3}={x:5};
y // 5var{message: msg ='this is msg'}={};
msg // "this is msg"
默认值生效的条件是,对象的属性值严格等于undefined。
var{x =3}={x:undefined};
x // 3var{x =3}={x:null};
x // null 因为null与undefined不严格相等,所以是个有效的赋值,导致默认值3不会生效。