let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4] let [x, y, ...z] = ['a'];//a==>'a' y==>undefined z==> [] let [a, [b], d] = [1, [2, 3], 4];//a==>1 b==>2 ...
let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4] let [x, y, ...z] = ['a'];//a==>'a' y==>undefined z==> [] let [a, [b], d] = [1, [2, 3], 4];//a==>1 b==>2 c==>4 let[a,b]=[1,2,3];//a==>1 b==>2
數組中變數左右兩邊一對一對應:
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==>2
let[a,,c]=[1,2,3];//a==>1 c==>3
let [a, [b], d] = [1, [2, 3], 4];//a==>1 b==>2 c==>4
左邊數量多於右邊數量,匹配不到數值變數均為undefined
let[a,b,c]=[1,,3];//a==>1 b==>undefined c==>3
特殊:arr為數組
let[a,...arr]=[1,2,3,4];//a==>1 arr==>[2,3,4]
let[a,...arr]=[1,];//a=>1 arr=>[]
同時解構賦值可以使用預設值
註:只有當數組成員嚴格等於undefined時,預設值才有效let[a,b='b']=['a'];//a==>'a' b==>'b' let[a,b='b']=['a',undefined];//a==>'a' b==>'b'
let[a=1]=[null];//a==>null let[a=1]=[];//a==>1; let[a=1]=[undefined];//a==>1
如果預設值是一個表達式,那麼這個表達式是惰性求值的,即只有在用到的時候,才會求值
function f() { console.log('aaa'); } let [x = f()] = [1];//x==>1; let[y=f()]=[]; y;//此時就y就相當於f();即結果為aaa
預設值可以引用解構賦值的其他變數,但該變數必須已經聲明。
let[a=1,b=a]=[];//a==>1 b==>2 let[a=b,b=1]=[];//報錯