解構賦值出現的契機:
let obj = {
a: 1,
b: 2
}
// 取值
let a = obj.a
let b = obj.b
問題核心:
每次取值既要確定對象屬性名,還得重新定義一個變量占用多一行,代碼行數和重復的聲明a,使得代碼不夠簡潔,能否通過左邊變量名,匹配到右邊的屬性名從而取得對應的值,ES6解構語法核心就基於這樣的模式匹配思想
上面的問題解構方案:
let obj = {
a: 1,
b: 2
}
// 取值
let {a, b} = obj
// a=1 b=2
很明顯看到,我們無需在右側顯式聲明取值屬性名,完全依據右邊結構進行對應取值,非常優雅
應用場景:
1.對象聲明解構
let obj = {
a: 1,
b: 2
}
// 取值
let {a, b} = obj
// a=1 b=2
2.對象賦值解構
let a, b
let obj = {
a: 1,
b: 2
}
// 取值
({a, b} = obj)
// 更常見的場景是變量c d被聲明到全局,這種情況在vue很常見,數據被提前聲明到data選項,數據訪問一般都是this.xxxdata,此時就很有用了
({a:c, b:d} = obj)
3.變量交換
[x,y] = [y,x]
4.數組解構
let [first,] = arr//獲取
let [first, ...rest] = arr//獲取第一個,以及剩余參數
5.函數對象實參解構
function buildAnimal({accessory = "", animal = "cat", color = 'rainbow', hairType = 'straight'} = {})
{...}