1.对象解构赋值的内部机制:先找到同名属性,然后赋值给相应的变量,实际被赋值的是后者
var {first:baz,last:bar} = {first:"aaa",last:"bbb"};
baz//"aaa"
bar//"bbb"
2.对于let 和const 而言,变量不能重复声明,所以一旦赋值的变量以前声明过,就会报错。例子如下:
let foo;
let {foo} = {foo:1};
let baz;
let {first:baz} = {first:"aaa"};
因为var命令允许重复声明变量,所以这个错误只在let和const命令中出现,如果没有第二个let命令,就不会报错,例子如下:
let foo;
({foo} = {foo:1});
let baz;
({first:baz} = {first:"aaa"});
3.解构也可以用于嵌套的对象:
var node = {
loc:{
start:{
line:1,
column:5
}
}
};
var {loc:{start:{line,column}}} = node;
console.log(line);//1
console.log(column);//5
4.对象的解构也可以指定默认值:
var {x = 2} = {};
console.log(x);x//2
var {x,y = 3} = {x:1};
console.log(x);x//1
console.log(y);y//3
var {x = 3} = {x:undefined};
console.log(x);//3
var {y = 2} = {y:null};
conole.log(y);//null
默认值生效的条件是:对象的属性值严格等于undefined。
5.下面写法会抛出语法错误:
var x;
{x} = {x:1};
因为JS引擎会将{x}理解成一个代码块,从而发生语法错误。正确的写法如下:
var x;
({x} = {x:1});
6.对象的解构赋值可以很容易的将现有对象的某些方法赋值到某个变量
let {log,sin,cos} = Math;
上面代码将Math对象的log(), sin(), cos()三个方法赋值给log,sin,cos变量。