解構(gòu)賦值
解構(gòu)賦值說白了就是一種模式匹配极颓,等號左右兩邊對應(yīng)變量和值霍骄。解構(gòu)賦值可以是完全解構(gòu)賦值,即每個(gè)值與右邊一一對應(yīng)扑庞,也可以是不完全解構(gòu)賦值譬重,即只取等號右邊值的一部分。解構(gòu)賦值可以對變量取默認(rèn)值罐氨。
解構(gòu)賦值取默認(rèn)值的條件是臀规,對應(yīng)值不全等于undefined,ES6全都是用 ===
即全等來判定是否為對等
數(shù)組的解構(gòu)賦值
數(shù)組的解構(gòu)賦值比較簡單栅隐,即[]
兩邊匹配即可
let [x,y] = [1,2] // x =1,y=2
let [z,m=1] = [1] // x = 1,m=1
let [a,[b,c],d] = [1,[2,3],4] // a = 1,b=2,c=3,d=4
對象的解構(gòu)賦值
對象的解構(gòu)賦值是有模式的
let {foo,foo:{a},foo:{a:[x,y,z=4]}} = {foo:{a:[1,2]}}
// foo:{a:[1,2,3]}
// a:[1,2,3]
// x=1,y=2,z=4
每個(gè)逗號都是一個(gè)模式塔嬉,變量的屬性值必須跟對象的屬性值相一致,否則無法成功為 undefined
租悄。
對象的解構(gòu)本質(zhì)上是下面的簡寫
let {foo:foo,baz:baz} = {foo:1,baz:2}
// foo:1,baz:2
對于已經(jīng)聲明的變量進(jìn)行賦值解構(gòu)谨究,要注意花括號的方式,系統(tǒng)會把它當(dāng)作塊級作用域泣棋,所以我們要非匹配模式的部分增加括號胶哲。
let foo
{foo} = {foo:1}
// 報(bào)錯(cuò) Uncaught SyntaxError
let foo
({foo} = {foo:1})
// foo : 1
數(shù)組本質(zhì)是特殊的對象,所以可以這樣取值:
let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3
字符串的解構(gòu)
在字符串的解構(gòu)過程中外傅,首先會把字符串轉(zhuǎn)變成數(shù)組纪吮,當(dāng)然,會有一個(gè)length屬性萎胰。
數(shù)值和布爾值
賦值解構(gòu)只要等號右邊不是數(shù)組跟對象碾盟,都會優(yōu)先轉(zhuǎn)換為對象
用途
交換變量的值
[x,y] = [y,x]
從函數(shù)返回多個(gè)值
函數(shù)參數(shù)的定義和默認(rèn)值
提取JSON的值
遍歷map解構(gòu)
指定模塊的輸出方法