ES6: 解構賦值-一種從數(shù)組或者對象中提取數(shù)據(jù)的優(yōu)雅方式

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  

譯者注

本文翻譯至這里,譯者水平有限吃型,錯漏缺點在所難免僚楞,希望讀者批評指正枉层。另:歡迎大家留言討論赐写。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挺邀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子端铛,更是在濱河造成了極大的恐慌,老刑警劉巖您朽,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哗总,死亡現(xiàn)場離奇詭異倍试,居然都是意外死亡,警方通過查閱死者的電腦和手機县习,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門准颓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攘已,你說我怎么就攤上這事》涂保” “怎么了峡眶?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長峭拘。 經(jīng)常有香客問我,道長辉饱,這世上最難降的妖魔是什么拣展? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮姓惑,結果婚禮上按脚,老公的妹妹穿的比我還像新娘。我一直安慰自己辅搬,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布夯缺。 她就那樣靜靜地躺著,像睡著了一般踊兜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上于游,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天垫言,我揣著相機與錄音,去河邊找鬼蚌成。 笑死凛捏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的坯癣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼芝硬,長吁一口氣:“原來是場噩夢啊……” “哼帆锋!你這毒婦竟也來了?” 一聲冷哼從身側響起锯厢,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤实辑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剪撬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡馍佑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年拭荤,在試婚紗的時候發(fā)現(xiàn)自己被綠了疫诽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡雏亚,死狀恐怖摩钙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情腺律,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站之斯,受9級特大地震影響,放射性物質發(fā)生泄漏莉擒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一填硕、第九天 我趴在偏房一處隱蔽的房頂上張望鹿鳖。 院中可真熱鬧,春花似錦翅帜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至韩脏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愚屁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工霎槐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丘跌。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓闭树,卻偏偏與公主長得像,于是被迫代替她去往敵國和親报辱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 基本用法 ES6 允許按照一定模式米奸,從數(shù)組和對象中提取值爽篷,對變量進行賦值悴晰,這被稱為解構(Destructuring...
    嘉奇呦_nice閱讀 789評論 0 2
  • 1.數(shù)組的解構賦值 2.對象的解構賦值 3.字符串的解構賦值 4.數(shù)值和布爾值的解構賦值 5.函數(shù)參數(shù)的解構賦值 ...
    卞卞村長L閱讀 916評論 0 0
  • 本文通過學習阮一峰的博客,外加自己的理解逐工,整理了一下我對js變量的解構賦值的理解铡溪。 數(shù)組的解構賦值 對象的解構賦值...
    宋樂怡閱讀 466評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)钻弄,斷路器佃却,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 原稿: 我揣著120個不愿意來到來到咖啡廳,眼前頓時一亮窘俺,這不是我暗戀了三年的男神嗎饲帅?我的小心臟開始撲通撲通亂跳。...
    靜聽陌上時光閱讀 242評論 5 1