解构赋值是对赋值运算符的扩展,针对数组或者对象进行模式匹配,然后对其中变量进行赋值。
解构模型
在解构中,有下面两部分参与:
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。
let [a,b,c] = [1,2,3]
//a=1 b=2 c=3
书写形式可嵌套
let [a,[[b,c]] = [1,[[2],3]]
可忽略的形式
let [a, ,b] = [1,2,3]
不完全结构
let [a=1,b]=[]
//a=1 b=undefined
剩余运算符
let [a,...b] =[1,2,3]
//a=1
//b=[2,3]
字符串等
let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
对象模型的解构
基本情况
let {foo,bar} = {foo:'a' , bar:'b'}
//foo = 'a' bar= 'b'
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
可嵌套可忽略
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { }] } = obj;
// x = 'hello'
不完全解构
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
剩余运算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}