-
從ES6開始,JavaScript引入瞭解構賦值,可以同時對一組變數進行賦值。。
1. 基本型別
let [lString, lBoolean, lNumber] = [`ES6`, true, 20181227];
// 結果:lString = ES6, lBoolean = true, lNumber = 20181227
/**
* 注意,對陣列元素進行解構賦值時,多個變數要用[...]括起來。
* 如果陣列本身還有巢狀,也可以通過下面的形式進行解構賦值,注意巢狀層次和位置要保持一致:
*/
let [lString, lBoolean, lNumber] = [`ES6`, [true, 20181227]];
// 結果:lString = ES6, lBoolean = true,20181227, lNumber = undefined
// 正確的做法
let [lString, [lBoolean, lNumber]] = [`ES6`, [true, 20181227]];
// 結果:lString = ES6, lBoolean = true, lNumber = 20181227
// 解構賦值還可以忽略某些元素:
let [, , lNumber] = [`ES6`, [true, 20181227]];
// 結果:lNumber = 20181227
2. 陣列型別
let [clubs, players] = [
[`Lakers`, `Magic`],
[`Lonzo Ball`, `Anthony Davis`, `Kawhi Leonard`, `Donovan Mitchell`, `達龍 福克斯`]
];
// 結果:clubs = [ `Lakers`, `Magic` ]
// 結果:players = [ `Lonzo Ball`, `Anthony Davis`, `Kawhi Leonard`, `Donovan Mitchell`, `達龍 福克斯` ]
3. 物件型別
let person = {
name: `達龍 福克斯`,
age: 20,
gender: `male`,
passport: `G-12345678`,
school: `Kentucky`,
address: {
city: `重慶`,
street: `龍湖時代天街`,
zipcode: `400002`
}
};
let { name, address: { city, zip } } = person;
/**
* name = `達龍 福克斯`
* city = `重慶`
* zip = undefined #因為屬性名是zipcode而不是zip
* 注意: address不是變數,而是為了讓city和zip獲得巢狀的address物件的屬性:
* address; #ReferenceError: address is not defined
*/
/**
* >> 使用解構賦值對物件屬性進行賦值時,如果對應的屬性不存在,變數將被賦值為undefined,
* 這和引用一個不存在的屬性獲得undefined是一致的。
* >> 如果要使用的變數名和屬性名不一致,可以用下面的語法獲取:
*/
let { name, address: { city, zipcode:code } } = person;
// code = `400002`
// 解構賦值還可以使用預設值,這樣就避免了不存在的屬性返回undefined的問題:
let { name, address: { city, zipcode:code }, club=`kings` } = person;
// club = `kings`
4. 使用場景
// 快速獲取當前頁面的域名和路徑:
let {hostname:domain, pathname:path} = location;
/**
* 如果一個函式接收一個物件作為引數,那麼,可以使用解構直接把物件的屬性繫結到變數中。
* 例如,下面的函式可以快速建立一個Date物件:
*/
function buildDate({year, month, day, hour=0, minute=0, second=0}) {
return new Date(year + `-` + month + `-` + day + ` ` + hour + `:` + minute + `:` + second);
}
buildDate({ year: 2018, month: 12, day: 27 });
// Thu Dec 27 2018 00:00:00 GMT+0800 (中國標準時間)
// 傳入hour、minute和second屬性:
buildDate({ year: 2018, month: 12, day: 27, hour: 20, minute: 15 });
// Thu Dec 27 2018 20:15:00 GMT+0800 (中國標準時間)