ES6 解構(gòu)賦值
概述:
解構(gòu)賦值是對(duì)賦值運(yùn)算符的擴(kuò)展闸拿。
他是一種針對(duì)數(shù)組或者對(duì)象進(jìn)行模式匹配仰禀,然后對(duì)其中的變量進(jìn)行賦值浑劳。
在代碼書寫上簡潔且易讀,語義更加清晰明了琐馆;也方便了復(fù)雜對(duì)象中數(shù)據(jù)字段獲取规阀。
解構(gòu)模型
在解構(gòu)中,有下面兩部分參與:
解構(gòu)的源瘦麸,解構(gòu)賦值表達(dá)式的右邊部分谁撼。
解構(gòu)的目標(biāo),解構(gòu)賦值表達(dá)式的左邊部分滋饲。
數(shù)組模型的解構(gòu)(Array)
基本
let [a, b, c] = [1, 2, 3];// a = 1// b = 2// c = 3
可嵌套
let [a, [[b], c]] = [1, [[2], 3]];// a = 1// b = 2// c = 3
可忽略
let [a, , b] = [1, 2, 3];// a = 1// b = 3
不完全解構(gòu)
let [a = 1, b] = []; // a = 1, b = undefined
剩余運(yùn)算符
let [a, ...b] = [1, 2, 3];//a = 1//b = [2, 3]
字符串等
在數(shù)組的解構(gòu)中厉碟,解構(gòu)的目標(biāo)若為可遍歷對(duì)象喊巍,皆可進(jìn)行解構(gòu)賦值」抗模可遍歷對(duì)象即實(shí)現(xiàn) Iterator 接口的數(shù)據(jù)崭参。
let [a, b, c, d, e] = 'hello';// a = 'h'// b = 'e'// c = 'l'// d = 'l'// e = 'o'
解構(gòu)默認(rèn)值
let [a = 2] = [undefined]; // a = 2
當(dāng)解構(gòu)模式有匹配結(jié)果,且匹配結(jié)果是 undefined 時(shí)款咖,會(huì)觸發(fā)默認(rèn)值作為返回結(jié)果何暮。
let [a = 3, b = a] = [];? ? // a = 3, b = 3let [a = 3, b = a] = [1];? ? // a = 1, b = 1let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
a 與 b 匹配結(jié)果為 undefined ,觸發(fā)默認(rèn)值:a = 3; b = a =3
a 正常解構(gòu)賦值铐殃,匹配結(jié)果:a = 1海洼,b 匹配結(jié)果 undefined ,觸發(fā)默認(rèn)值:b = a =1
a 與 b 正常解構(gòu)賦值富腊,匹配結(jié)果:a = 1贰军,b = 2
對(duì)象模型的解構(gòu)(Object)
基本
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };// foo = 'aaa'// bar = 'bbb' 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'
不完全解構(gòu)
let obj = {p: [{y: 'world'}] };let {p: [{ y }, x ] } = obj;// x = undefined// y = 'world'
剩余運(yùn)算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};// a = 10// b = 20// rest = {c: 30, d: 40}
解構(gòu)默認(rèn)值
let {a = 10, b = 5} = {a: 3};// a = 3; b = 5;let {a: aa = 10, b: bb = 5} = {a: 3};// aa = 3; bb = 5;