ES6中解構(gòu)

一部蛇、變量解構(gòu)

????1.什么是解構(gòu)

????????es6允許按照一定的模式,從數(shù)組和對象中提取值,對變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)

????2.數(shù)組解構(gòu)賦值

????????語法:

????????????let[a,b,c] = [1,2,3];

????????????console.log(a,b,c);

????????????1)從數(shù)組中取值,按照對應(yīng)位置,對應(yīng)變量賦值,這種寫法屬于"匹配模式",只要等號兩邊模式相同,左邊的變量就會被賦予相對應(yīng)的值

????????????2)如果解構(gòu)失敗,變量的值就等于undefined

????????????3)不完全解構(gòu):等號左邊的模式只匹配一部分右邊的數(shù)組,解構(gòu)依然成功

????????????4)如果等號右邊不是數(shù)組:會報(bào)錯(cuò)

????????????5)解構(gòu)賦值允許默認(rèn)值:只有解構(gòu)失敗也就是變量嚴(yán)格等(===)??undefined,默認(rèn)值才會生效

????????????6)如果默認(rèn)值是一個(gè)表達(dá)式,那么這個(gè)表達(dá)式是惰性求值,即只有在用到時(shí)才能執(zhí)行

????????????7)默認(rèn)值可以引用解構(gòu)賦值的其他變量,但是被引用的變量必須已經(jīng)被定義

????3.對象解構(gòu)賦值

????????語法:

?????????????let{a,b} = {a:"aa",b:"bb"};

?????????????console.log(a,b);//aa bb

????????順序:

????????????數(shù)據(jù)解構(gòu)按照對應(yīng)位置關(guān)系,但是對象解構(gòu)變量取值沒有順序,變量必須與屬性同名,才能解構(gòu)成功

????????????變量與屬性不同名:

??????????????????let{a:c} = {a:'aaa',b:"bbb"};

??????????????????console.log(c);//aaa

????????????機(jī)制:先找到同名屬性,然后再賦值給對應(yīng)的變量,真正被賦值的是后者,而不是前者

????????????變量同名:報(bào)錯(cuò)

????????????es6規(guī)定了let和const命令定義的變量不能重復(fù)定義,結(jié)構(gòu)賦值也是一樣的

????????????如果沒有第二個(gè)let命令就不會報(bào)重復(fù)定義的錯(cuò)誤,但是編譯器會將左邊的大括號理解為一個(gè)代碼塊,代碼塊是不能被賦值的,解決辦法:將整個(gè)表達(dá)式放進(jìn)小括號中,降級為一個(gè)表達(dá)式,就不會被認(rèn)為是代碼塊了

????????????嵌套:對象解構(gòu)也可以嵌套

????????????????前提:兩邊的模式一定要一樣

????????????嵌套賦值

????????????????對象解構(gòu)默認(rèn)值

????????????????默認(rèn)值生效的條件是:對象的屬性嚴(yán)格等undefined

????4.字符串的解構(gòu)賦值

????????字符串在解構(gòu)時(shí),會將字符串轉(zhuǎn)換為一個(gè)類數(shù)組

????????語法:

???????????let[a,b,c,d] = 'hello';

???????????console.log(a,b,c,d);// h e l l

????????在字符串轉(zhuǎn)換的類數(shù)組中有一個(gè)屬性叫做length,可以對這個(gè)屬性進(jìn)行解構(gòu)賦值

????5.數(shù)值和布爾值的解構(gòu)賦值

????????使用對象解構(gòu)方案

????????如果等號右邊是數(shù)值或布爾,左邊是對象,那么數(shù)值或布爾會先被轉(zhuǎn)為對象,再解構(gòu)

????????解構(gòu)的原則:數(shù)組解構(gòu)只要右邊不是數(shù)組或者字符串,就會報(bào)錯(cuò)

??????????????????對象解構(gòu)右邊不是對象就會先轉(zhuǎn)為對象,然后解構(gòu)

??????????????????由于null和undefined無法轉(zhuǎn)為對象,所以對他們進(jìn)行的解構(gòu)都會報(bào)錯(cuò)

????6.函數(shù)的解構(gòu)賦值

?????????語法:

????????????function fun([x,y]) {

????????????????console.log(x+y);//3

????????????}

????????????fun([1,2]);//實(shí)參

????????解析語法:fun函數(shù)的參數(shù)是一個(gè)數(shù)組,調(diào)用fun傳入的也是一個(gè)數(shù)組,在傳入的瞬間,實(shí)參與形參進(jìn)行了解構(gòu),將x和y兩個(gè)變量進(jìn)行了賦值

????????????函數(shù)的解構(gòu)可以使用默認(rèn)值

????????????函數(shù)參數(shù)是一個(gè)對象,通過對象解構(gòu),得到x,y的值,如果解構(gòu)失敗就用默認(rèn)值

????7.解構(gòu)的用途

????????1)交換變量的值

????????2)從函數(shù)返回多個(gè)值

????????????函數(shù)一次只能返回一個(gè)值,想要返回多個(gè)值,只能將返回值放入數(shù)組或?qū)ο蠓祷?有的解構(gòu)方法就可以輕松的取出這些值

????????3)函數(shù)傳參

????????4)提取json數(shù)據(jù)

????????????解構(gòu)對提取json尤其有用

????????5)函數(shù)參數(shù)默認(rèn)值

???????????es6允許函數(shù)的參數(shù)設(shè)置默認(rèn)值

二模她、函數(shù)擴(kuò)展

????1.函數(shù)參數(shù)默認(rèn)值????

?????????直接將默認(rèn)值寫在形參之后

?????????function fun(x,y='world') {

????????????console.log(x,y);

???????????}

????????與解構(gòu)配合使用

?????????function fun({x,y=5} ={}) {

????????????console.log(x,y);

??????????}

??????????參數(shù)默認(rèn)值的位置:

????????????如果函數(shù)定義默認(rèn)值,這個(gè)默認(rèn)值一般會是尾參數(shù)(最后一個(gè)參數(shù)),如果非尾參數(shù)設(shè)置了默認(rèn)值,事實(shí)上這個(gè)參數(shù)是無法省略的

??????????函數(shù)參數(shù)的個(gè)數(shù):

?????????????函數(shù)的length屬性

?????????????函數(shù)名.length??是函數(shù)形參個(gè)數(shù)

?????????????函數(shù)形參個(gè)數(shù)不包含默認(rèn)值的參數(shù),以及默認(rèn)值后邊的形參都不被包含,rest參數(shù)也不包含在length之中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垃沦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坤学,更是在濱河造成了極大的恐慌疯坤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件深浮,死亡現(xiàn)場離奇詭異压怠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)略号,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門刑峡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玄柠,你說我怎么就攤上這事突梦。” “怎么了羽利?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵宫患,是天一觀的道長。 經(jīng)常有香客問我这弧,道長娃闲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任匾浪,我火速辦了婚禮皇帮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛋辈。我一直安慰自己属拾,他們只是感情好将谊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐白,像睡著了一般尊浓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纯衍,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天栋齿,我揣著相機(jī)與錄音,去河邊找鬼襟诸。 笑死瓦堵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的励堡。 我是一名探鬼主播谷丸,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼堡掏,長吁一口氣:“原來是場噩夢啊……” “哼应结!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泉唁,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鹅龄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后亭畜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扮休,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年拴鸵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玷坠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劲藐,死狀恐怖八堡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聘芜,我是刑警寧澤兄渺,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站汰现,受9級特大地震影響挂谍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞎饲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一口叙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗅战,春花似錦妄田、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铅辞。三九已至,卻和暖如春萨醒,著一層夾襖步出監(jiān)牢的瞬間斟珊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工富纸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囤踩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓晓褪,卻偏偏與公主長得像堵漱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子涣仿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)勤庐,也就是一...
    悟名先生閱讀 4,118評論 0 13
  • 前面的話 我們經(jīng)常定義許多對象和數(shù)組,然后有組織地從中提取相關(guān)的信息片段好港。在ES6中添加了可以簡化這種任務(wù)的新特性...
    sunnyghx閱讀 749評論 0 0
  • 1愉镰、新的聲明方式 以前我們在聲明時(shí)只有一種方法,就是使用var來進(jìn)行聲明钧汹,ES6對聲明的進(jìn)行了擴(kuò)展丈探,現(xiàn)在可以有三種...
    令武閱讀 999評論 0 7
  • 春天草長鶯飛碗降,適合萬物生長。怎樣才能幫助孩子在這個(gè)季節(jié)更好地長高呢塘秦?睡得好吃得科學(xué)是關(guān)鍵讼渊。千萬別因?yàn)檫@兩點(diǎn)做不好耽...
    原子?jì)屵?/span>閱讀 216評論 0 0
  • 你要做的是忠于自己的夢想不管它發(fā)不發(fā)光
    白棧青閱讀 86評論 0 1