1.什么是解構(gòu)賦值
解構(gòu)賦值的語(yǔ)法上就是一個(gè)賦值;
解構(gòu):左邊一種結(jié)構(gòu),右邊一種結(jié)構(gòu),左右一一對(duì)應(yīng)進(jìn)行賦值;
2.解構(gòu)賦值的分類(lèi)
數(shù)組解構(gòu)賦值: 左右結(jié)構(gòu)都是數(shù)組叫做數(shù)組解構(gòu)賦值童漩;
對(duì)象解構(gòu)賦值: 左右都是對(duì)象叫做對(duì)象解構(gòu)賦值;
字符串解構(gòu)賦值: 左邊是字符串右邊是數(shù)組仓蛆,這種叫字符串解構(gòu)賦值睁冬;
布爾值解構(gòu)賦值: 都屬于對(duì)象解構(gòu)賦值的一種;
數(shù)值解構(gòu)賦值: 都屬于對(duì)象解構(gòu)賦值的一種;
-
函數(shù)參數(shù)解構(gòu)賦值: 數(shù)組解構(gòu)賦值在函數(shù)參數(shù)這塊的一個(gè)應(yīng)用豆拨;
eg:1.
{ let a, b,rest; [a,b] = [1,2]; //數(shù)組類(lèi)型解構(gòu)賦值直奋;a賦值為1,b賦值為2 console.log(a,b);//1,2 }
2.
{ let a, b, rest; [a,b,...rest]=[1,2,3,4,5,6]; console.log(a,b,rest); //1,2,[3,4,5,6] }
3.對(duì)象的解構(gòu)賦值
{ let a =b; ({a,b}={a:1,b:2}) console.log(a,b);//1 2 }
4.
{ let a, b, c,rest; [a,b,c=3] = [1,2]; console.log(a,b,c);//1,2,3 } { let a, b, c,rest; [a,b,c] = [1,2]; console.log(a,b,c);//1,2,undefined }
如果解構(gòu)賦值沒(méi)有在結(jié)構(gòu)上成功配對(duì)施禾,左邊是[a,b,c] 右邊是[1,2]c就沒(méi)有找到與它配對(duì)的值脚线,這種c就為undefined;只聲明了未賦值弥搞;所以c=3默認(rèn)值就是來(lái)解決這個(gè)問(wèn)題的邮绿;(c=3防止了沒(méi)有配對(duì)成功時(shí)默認(rèn)值為undefined)
什么場(chǎng)景下用數(shù)組解構(gòu)賦值?
1.關(guān)于變量的交換
{
let a =1;
let b =2;
[a,b]=[b,a];//使用解構(gòu)賦值輕松的實(shí)現(xiàn)了變量交換
console.log(a,b);//2 1
}
2.
{
function f(){
return [1,2];
}
let a, b;
[a,b] = f();
console.log(a,b); //1 2
}
3.當(dāng)返回多個(gè)值的情況下攀例,可以選擇行的去接收某幾個(gè)變量
(忽略某些返回值船逮,只關(guān)心想要的)
{
function f(){
return [1,2,3,4,5]
}
let a,b,c;
[a,,,b] = f();
console.log(a,b);//1 4
}
4.不確定這個(gè)函數(shù)返回?cái)?shù)組的長(zhǎng)度是多少, 只關(guān)心第一個(gè)粤铭,其余的返回一個(gè)數(shù)組就可以了挖胃,想用就去遍歷,不想用就放那里
{
function f(){
return [1,2,3,4,5]
}
let a,b,c;
[a,...b] = f();
//[a,,...b] = f();//1 [3,4,5]
console.log(a,b);//1 [2,3,4,5]
}}
對(duì)象解構(gòu)賦值
左側(cè)一定是一個(gè)對(duì)象的格式梆惯,右側(cè)也是對(duì)象的格式酱鸭,是通過(guò)key、value去匹配的
1.
{
let o ={p:42,q:true};
let {p,q} =o;
console.log(p,q);//42 true
}
2.默認(rèn)值處理
a的默認(rèn)值是10垛吗,后邊對(duì)它重新賦值是3凹髓,最后輸出結(jié)果是3;
b默認(rèn)值是5怯屉,后邊沒(méi)有對(duì)b重新賦值蔚舀,b就是5;
{
let {a=10,b=5}={a=3};
console.log(a,b);//3 5
}
3.對(duì)象解構(gòu)賦值重要的使用場(chǎng)景:
(嵌套對(duì)象和數(shù)組的一個(gè)運(yùn)用蚀之;)
前端和服務(wù)端通信使用的格式是json蝗敢;json可以理解是一個(gè)對(duì)象;
{
let metaDate={
title:'abc',
test:[{
title:'test',
desc:'description'
}]
}
let {title:esTitle,test:[{title:cnTitle}]} = metaDate;
console.log(esTitle,cnTitle);//abc test
}