解構賦值,是ES6中給變量賦值的一種方法。顧名思義,他是經過某一語法規則,解析某一事物的結構來進行賦值。結構的對象一般有數組,對象,函數參數等。數組
[variable1,variable2,...,variableN]=[val1,val2,...,valN]
//目標解構數組
var person=["jk","female",23];
//執行解構與賦值
var [name,gender,age]=person;
/*傳統的賦值操做
var name=person[0],gender=person[1],age=person[2];
*/
//測試解構賦值結果
console.log(name,gender,age)//"jk" "female" 23
複製代碼
[[variable1,...,variableN]]=[[val1,...,valN]]
//目標解構數組
var person=["jk","female",23,[500,300]];
//執行解構賦值操做
//綜合式
var [,,,[blood,magic]]=person;
/*分步式
var [,,,primaryInfo]=person;
var [blood,magic]=primaryInfo;
*/
//檢測解構賦值結果
console.log(blood,magic)//500,300
複製代碼
//目標解構數組
var person=["jk","female",23];
//執行解構賦值操做
var [,...oth]=person;
//檢測解構賦值結果
console.log(oth)//["female", 23]
複製代碼
//目標解構數組
var person=["jk","female",23,,undefined];
//執行解構賦值操做
var [,,,blood=500,magic=300]=person;
//檢測解構賦值結果
console.log(blood,magic)//500 300
複製代碼
var {attr3, attr2, attr10, ..., attrN} = targetObj
//解構對象
var person = {name:"jk",gender:"female",age:24} ;
// ES6 簡單的結構賦值 語法
var {name,gender,age}=person;
// ES6 以前的解構賦值實現
var name=person.name,gender=person.gender,age=person.age;
var name=person["name"],gender=person["gender"],age=person["age"]
// 測試
console.log(name);//"jk"
console.log(gender);//"female"
console.log(age);//24
複製代碼
var {attr3:arrayName1, attr2:arrayName2, attr10:arrayName3, ..., attrN:arrayNameN} = targetObj
var targetObj={name:"jk",gender:"female",age:23};
var {name:friendName,gender:friendGender,age:friendAge}=targetObj;
console.log(friendName,friendGender,friendAge);//jk female 23
複製代碼
targetObj = {attr_1:[arrayVal_1, ..., arrayVal_N], ..., attr_N:attrVal_N}
var {attr_1:[arrayName_1, ..., arrayName_N], ..., attr_N}=targetObj
複製代碼
// 目標解構對象
var person = {
name:"jk",
gender:"male",
equipments:[{weapon:"迫擊炮",hand:"金手",body:"金甲",foot:"鋼靴"},"靈丹","煙霧"]
};
// 數組與對象的綜合解構賦值 綜合式
var {equipments:[{weapon,hand,body,foot},tool1,tool2]}=person;
// 數組與對象的綜合解構賦值 分步式
var {equipments}=person;
var [equipment,tool1,tool2]=equipments;
var {weapon,hand,body,foot}=equipment;
// 測試
console.log(weapon,hand,body,foot,tool1,tool2);//迫擊炮、金手、金甲、鋼靴、靈丹、煙霧
複製代碼
var {attr10,...,...arrayName}=targetObj
// 目標解構對象
var person = {
name:"jk",
gender:"male",
equipments:[{weapon:"迫擊炮",hand:"金手",body:"金甲",foot:"鋼靴"},"靈丹","煙霧"]
};
// 解構 person 對象 ,將除equipments屬性外的屬性 獨立成一個新對象 賦值給 other 變量
var {equipments,...other}=person;
// 測試
console.log(equipments,other);//other={name: "jk", gender: "male"}
複製代碼
objA={attr1:attrVal_1,...,...objB}
// 併入對象
var skills={
attack:["大吼","霸氣爺們兒券"],
defend:["鐵壁","引力場"],
cure:["恢復","治療"]
}
// 將skill 對象屬性 併入person對象中
var person = {
name:"jk",
gender:"male",
equipments:[{weapon:"迫擊炮",hand:"金手",body:"金甲",foot:"鋼靴"},"靈丹","煙霧"],
...skills
// ...skill 等價於 ...{attack:["大吼","霸氣爺們兒券"],defend:["鐵壁","引力場"],cure:["恢復","治療"]}
};
// 測試
console.log(person.attack);//["大吼", "霸氣爺們兒券"]
console.log(person.defend);//["鐵壁", "引力場"]
console.log(person.cure);//["恢復", "治療"]
複製代碼
項目 | 字符串 | 數值 | 布爾值 |
---|---|---|---|
數組結構方式 | 支持,解構字符 | 不支持 | 不支持 |
對象解構方式 | 支持,解構屬性 | 支持,解構屬性 | 支持,解構屬性 |
函數的解構賦值,其實解構前面的幾大數據類型,而後賦值給函數參數,或者將函數返回的數據類型,用解構賦值的方式讀取出來。bash