ES6充滿著樂趣侄榴,它不但真正提升了我們對 JavaScript 的編程體驗网沾,而且顯示了 JavaScript 值得活下來辉哥。
它有一個從數(shù)組和對象中解構值的新特性攒射,使得我們很方便的就能從數(shù)組和對象中提取到數(shù)據(jù)。
讓我們看看是如何做到的会放,我們先從數(shù)組開始。
從數(shù)組中提取數(shù)據(jù)
假設我們有一個存著名字的數(shù)組:
const names = ['Luke', 'Eva', 'Phil'];
接下來讓我們用解構來從中提取數(shù)據(jù)捂人。
從數(shù)組中提取元素
讓我們從最最基本的提取第一個元素開始:
const [first] = names;
console.log(first); // Luke
現(xiàn)在矢沿,我們來分析這段代碼做了些什么。一個變量被方括號包含瑟匆,這就意味著我們想從 names 數(shù)組拿到第一個元素并且將這個元素賦值給變量栽惶,在我們的例子中首先把數(shù)組中第一個元素的值賦給了變量。
現(xiàn)在外厂,假如我們想從數(shù)組中拿到多個元素的值,比如說第一和第二個交惯,我們該如何做穿仪? 其實很簡單,我們只需要在方括號中添加多個變量就可以實現(xiàn)只锻。這樣在數(shù)組前列的新元素就會被提取并且賦值給定義的變量紫谷。
const [first, second] = names;
console.log(first, second); // Luke Eva
元素不存在時的默認值
假設我們從只有三個元素的數(shù)組中解析四個元素捐寥,會發(fā)生什么?
const [first, second, third, fourth] = names;
console.log(fourth); // undefined
在這種情況下祖驱,fourth 為 undefied 。
我們可以給第四個元素設置一個默認的值乡洼,當結構時數(shù)組元素不足時匕坯,第四個值默認就是我們設置的值。
const [first, second, third, fourth='Martin'] = names;
console.log(fourth); // 'Martin'
略過數(shù)組中的值
現(xiàn)在我們已經(jīng)知道了從數(shù)組開始時解構锹雏,但是术奖,我們經(jīng)常遇見我們只需要數(shù)組中一部分的值,所以就會存在略過數(shù)組的值的情況腰耙。
不過很棒的地方就是,解構其實可以滿足我們這種需求:
var [first, , second] = names;
console.log(first, second); // 'Luke' 'Phil'
其實很簡單只需要把略過的值得逗號加上晰赞,就可以略過數(shù)組中的值选侨。
把數(shù)組中剩下的部分賦值給變量
解構不同的值現(xiàn)在變得很簡單,但是很多情況下我們需要保留一部分沒有被解構的數(shù)組戏挡。
我們現(xiàn)在來看看如何做到:
var [first, ...rest] = names;
console.log(rest); // ['Eva','Phil']
在變量前加上 ... 就能夠將剩下部分數(shù)組保存到變量中晨仑。
解構對象
我們已經(jīng)知道了如何解構數(shù)組, 現(xiàn)在讓我們來看看如何從對象中解構值洪己,先看這個對象
const person = {
name: 'Luke',
age: '24',
facts: {
hobby: 'Photo',
work: 'Software Developer'
}
}
從這個對象中解構值
我們從最基礎的開始答捕,從Person 對象中解構name 和 age 的值。
···
const {name, age} = person;
console.log(name, age); // 'Luke' '24'
···
我們可以看到拱镐,幾乎和數(shù)組的寫法一致持际,只是把方括號換成大括號哗咆。
解構嵌套的值
假設我們現(xiàn)在想解構對象深層次的值岳枷,比如說 person 對象的 hobby:
const {facts: {hobby}} = person;
console.log(hobby); // 'Photo'
通過冒號,我們可以找到屬性的路徑空繁,從而可以解析我們需要哪個值朱庆。
當沒有解構成功時的默認值
我們在解析數(shù)組時可以給解構變量設置默認值,對象也同樣可以傲诵。為了看到是怎樣做的箱硕,我們我們可以嘗試解構默認值為 Unknow 的 hometown。
const {hometown = 'Unknown'} = person;
console.log(hometown); // 'Unknown'
解構函數(shù)參數(shù)
結束之前栓拜,我們來看看解構最后一個應用惠昔,函數(shù)參數(shù)解構。假設你的函數(shù)有一個對象類型的參數(shù)啦鸣,然后你就可以直接在參數(shù)表中解構變量来氧。
我們嘗試寫一個叫做 tostring 的函數(shù),函數(shù)中將打印一個人的名字和年齡啦扬。
const toString = ({name, age}) => {
return `${name} is ${age} years old`;
}
toString(person); // Luke is 24 years old
譯者注
本文翻譯至這里,譯者水平有限吃型,錯漏缺點在所難免僚楞,希望讀者批評指正枉层。另:歡迎大家留言討論赐写。