ES6 解構(gòu)賦值介紹以及用法

概述

  • 解構(gòu)賦值是對賦值運算符的擴展煎娇。
  • 他是一種針對數(shù)組或者對象進行模式匹配姥闭,然后對其中的變量進行賦值丹鸿。
  • 在代碼書寫上簡潔且易讀,語義更加清晰明了泣栈;也方便了復雜對象中數(shù)據(jù)字段獲取卜高。

解構(gòu)模型

在解構(gòu)中,有下面兩部分參與:

  • 解構(gòu)的源南片,解構(gòu)賦值表達式的右邊部分掺涛。
  • 解構(gòu)的目標,解構(gòu)賦值表達式的左邊部分疼进。

數(shù)組模型的解構(gòu)(Array)

基本
let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3
可嵌套
let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3
可忽略
let [a, , b] = [1, 2, 3];
// a = 1
// b = 3
不完全解構(gòu)
let [a = 1, b] = []; // a = 1, b = undefined
剩余運算符
let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]
字符串等

在數(shù)組的解構(gòu)中薪缆,解構(gòu)的目標若為可遍歷對象,皆可進行解構(gòu)賦值伞广〖鹈保可遍歷對象即實現(xiàn) Iterator 接口的數(shù)據(jù)。

let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'
解構(gòu)默認值
let [a = 2] = [undefined]; // a = 2

當解構(gòu)模式有匹配結(jié)果嚼锄,且匹配結(jié)果是 undefined 時减拭,會觸發(fā)默認值作為返回結(jié)果。

let [a = 3, b = a] = [];     // a = 3, b = 3
let [a = 3, b = a] = [1];    // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2
  • a 與 b 匹配結(jié)果為 undefined 区丑,觸發(fā)默認值:a = 3; b = a =3
  • a 正常解構(gòu)賦值拧粪,匹配結(jié)果:a = 1修陡,b 匹配結(jié)果 undefined ,觸發(fā)默認值:b = a =1
  • a 與 b 正常解構(gòu)賦值可霎,匹配結(jié)果:a = 1魄鸦,b = 2

對象模型的解構(gòu)(Object)

基本
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
// foo = 'aaa'
// bar = 'bbb'
 
let { baz : foo } = { baz : 'ddd' };
// foo = 'ddd'
可嵌套可忽略
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, {  }] } = obj;
// x = 'hello'
不完全解構(gòu)
let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = 'world'
剩余運算符
let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
解構(gòu)默認值
let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;

// (1)普通解構(gòu)賦值
let arr=['1','2']
let [str1,str2]=arr
console.log(str1,str2) // 1,2

// (2)我只需要取其中某一部分的情況

let arr=['1','2','3','4']
let [str1, , str2]=arr // 跳過誰使用逗號隔開
console.log(str1,str2) // 1,3

// (3)字符串解構(gòu)賦值
let zifu='abcde' 
let [str1,,str2]=zifu // 同(2)
console.log(str1,str2) // a,c

// (4) 對數(shù)據(jù)為Object進行解構(gòu)賦值
let user={names:'c',surnames:'d'};
[user.names,user.surnames]=['a','b'] // 注意對對象中已有屬性進行賦值時,不能使用關(guān)鍵字進行聲明了
console.log(user) //a,b

//(5) 對循環(huán)進行解構(gòu)賦值
let user={names:'c',surnames:'d'};
for (let[key,val]  of Object.entries(user)) { //沒看懂可以看下面注釋在結(jié)合(1)進行看
  console.log(`鍵:${key},值:${val}`)
}

/**
 * Object.entries() 可以把一個對象的鍵值以數(shù)組的形式遍歷出來癣朗,
 * 結(jié)果和 for...in 一致拾因,但不會遍歷原型屬性
 * 
 * const obj = { foo: 'bar', baz: 'abc' }; 
 * console.log(Object.entries(obj));  // [['foo', 'bar'], ['baz', 'abc']]
 */

//(6) 結(jié)合 ...運算語法 
let arr=['a','b','c','d','e','f']
let [str1,str2,...strArr]=arr //...strArr 剩余的值將存放strArr中
console.log(str1,str2,strArr) // a,b,["c", "d", "e", "f"]

//(7) 如果數(shù)據(jù)過少 或者沒有, 解構(gòu)出來的是undefined ,可以使用參數(shù)默認值
let arr=[]
let [str1='參數(shù)默認值',str2,...strArr]=arr 
console.log(str1,str2,strArr) // '參數(shù)默認值', undefined, []
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旷余,隨后出現(xiàn)的幾起案子绢记,更是在濱河造成了極大的恐慌,老刑警劉巖荣暮,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庭惜,死亡現(xiàn)場離奇詭異,居然都是意外死亡穗酥,警方通過查閱死者的電腦和手機护赊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砾跃,“玉大人骏啰,你說我怎么就攤上這事〕楦撸” “怎么了判耕?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長翘骂。 經(jīng)常有香客問我壁熄,道長,這世上最難降的妖魔是什么碳竟? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任草丧,我火速辦了婚禮,結(jié)果婚禮上莹桅,老公的妹妹穿的比我還像新娘昌执。我一直安慰自己,他們只是感情好诈泼,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布懂拾。 她就那樣靜靜地躺著,像睡著了一般铐达。 火紅的嫁衣襯著肌膚如雪岖赋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天瓮孙,我揣著相機與錄音唐断,去河邊找鬼汁汗。 笑死,一個胖子當著我的面吹牛栗涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祈争,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼斤程,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菩混?” 一聲冷哼從身側(cè)響起忿墅,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沮峡,沒想到半個月后疚脐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡邢疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年棍弄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟游。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡呼畸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颁虐,到底是詐尸還是另有隱情蛮原,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布另绩,位于F島的核電站儒陨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏笋籽。R本人自食惡果不足惜蹦漠,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望干签。 院中可真熱鬧津辩,春花似錦、人聲如沸容劳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竭贩。三九已至蚜印,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間留量,已是汗流浹背窄赋。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工哟冬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忆绰。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓浩峡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親错敢。 傳聞我的和親對象是個殘疾皇子翰灾,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 作者:米書林參考文章:《菜鳥教程》、《 ECMAScript 6 入門》(阮一峰) 解構(gòu)的定義 ES6 允許按照一...
    林之小記閱讀 399評論 0 1
  • 『ES6腳丫系列』變量的解構(gòu)賦值 第一章:變量的解構(gòu)賦值的概念 【01】Q:什么是變量的解構(gòu)賦值稚茅?有哪些方式纸淮? 吃...
    吃碼小妖閱讀 760評論 0 0
  • 概述 解構(gòu)賦值是對賦值運算符的擴展。他是一種針對數(shù)組或者對象進行模式匹配亚享,然后對其中的變量進行賦值咽块。在代碼書寫上簡...
    遼A丶孫悟空閱讀 505評論 1 11
  • 一、前言 什么是“解構(gòu)賦值”呢欺税?就是從數(shù)組或者對象中取值侈沪,對變量進行賦值,這就是變量的解構(gòu)賦值魄衅。 二峭竣、數(shù)組的解構(gòu)賦...
    前端開發(fā)_Eric閱讀 202評論 0 4
  • 一、定義 解構(gòu)賦值是對賦值運算符的一種擴展晃虫,針對數(shù)組或者對象進行模式匹配皆撩,然后對其中的變量進行賦值。在解構(gòu)中有兩部...
    小龍蝦Julian閱讀 81評論 0 1