什么是解构赋值
解构赋值是 es6 新增语法,通过解构赋值可以从对象(数组 / 字符串)中将属性值(元素 / 字符)提取出来,赋值或初始化给其他变量。
应用场景
赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var a, b; [a, b] = [1, 2];
var foo = ["one", "two", "three"]; var [one, two, three] = foo;
var o = {p: 42, q: true}; var {p, q} = o;
console.log(p); console.log(q);
var a, b;
({a, b} = {a: 1, b: 2});
|
设置默认值
1 2 3 4 5 6 7 8 9 10 11 12
| var a, b;
[a=5, b=7] = [1]; console.log(a); console.log(b);
var {a:aa = 10, b:bb = 5} = {a: 3};
console.log(aa); console.log(bb);
|
交换变量
1 2 3 4
| var a = 1; var b = 3;
[a, b] = [b, a];
|
接收函数返回值
1 2 3 4 5 6 7
| function f() { return [1, 2]; }
var a, b; [a, b] = f(); [, b] = f();
|
将剩余数组赋值给一个变量
1 2 3 4 5 6 7 8 9 10
| var [a, ...b] = [1, 2, 3]; console.log(a); console.log(b);
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40} a; b; rest;
|
注意
解构对象时会查找原型链
如果属性不在对象自身,将从原型链中查找
1 2 3 4 5 6 7 8
| var obj = {self: '123'};
obj.__proto__.prot = '456';
const {self, prot} = obj;
|
解构赋值是浅拷贝
1 2 3 4 5 6 7 8
| var src = {a: {b: 1}}; var {a} = src;
a.b = 2;
console.log( JSON.stringify(a) ); console.log( JSON.stringify(src) );
|