基本
ES6 允許按照一定模式液样,從數(shù)組和對象中提取值,對變量進(jìn)行賦值肝箱,這被稱為解構(gòu)
比如要為a,b,c三個(gè)變量賦值
let a = 1;
let b = 2;
let c = 3;
es6允許寫成
let [a,b,c]=[1,2,3]
只要兩邊的結(jié)構(gòu)相同,左邊的變量就會被賦予右邊對應(yīng)的值
當(dāng)結(jié)構(gòu)不成功,值會等于undefined
let [b] = []
let [a,b]=[1]
b的值會等于undefined
上面是一種情況 ,還有另一種情況
let [x,y] = [1,2,3] // x=1;y=2
let [x,[y],z]= [1,[2,3],4] // x=1 y=2 z=4
上面的情況為不完全結(jié)構(gòu),即只匹配一部分右邊的數(shù)組,但是依舊可以結(jié)構(gòu)成功
等號的右邊必須是可遍歷的結(jié)構(gòu),否則會報(bào)錯(cuò)
let [a] = 1;
let [a] = false;
let [a] = NaN;
let [a] = undefined;
默認(rèn)值
解構(gòu)允許有默認(rèn)值
let [a,b=1] =[2] // a=2 b=1
ES6 通過嚴(yán)格相等運(yùn)算符判斷一個(gè)值是否有值, ===undefined
默認(rèn)值才會生效
let [a=1]=[undefined];//a=1
let[a=1] = [null] ;//a=null
如果默認(rèn)值是表達(dá)式,那么表達(dá)式只在沒有值的情況下執(zhí)行.
默認(rèn)值可以使用結(jié)構(gòu)賦值的其他變量,但該變量必須已經(jīng)賦值否則會報(bào)錯(cuò)
let [x = y, y = 1] = []; // ReferenceError
對象的解構(gòu)與數(shù)組相似,但是數(shù)組按照順序排列,變量取值可以根據(jù)次序覺得;對象沒有順序,所以變量必須與屬性同名
let { a, b } = { a: "aaa", b: "bbb" };
a // "aaa"
b // "bbb"
let { c } = { a: "aaa", b: "bbb" };
c //'undefined'
函數(shù)參數(shù)
函數(shù)參數(shù)也可以解構(gòu)賦值
function add([a, b]){
return a + b;
}
//帶默認(rèn)值
function move({x = 0, y = 0} = {}) {
return [x, y];
}
other
字符串,數(shù)字,布爾值,也可以解構(gòu)
字符串會被轉(zhuǎn)換成類似數(shù)組的對象,
數(shù)值和布爾值則會轉(zhuǎn)成對象.
undefined和null不能轉(zhuǎn)成對象,所以無法進(jìn)行解構(gòu)賦值