雜貨小鋪之ES6+ ?? 解構(gòu)賦值

es.png
  • 解構(gòu)賦值

?? 在 ES6 中新增了變量賦值的方式:解構(gòu)賦值杀怠。允許按照一定模式排龄,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值

  1. 單獨(dú)賦值給變量如暖;
let [a, b, c] = [1,2,3]
console.log(a, b, c) // 1 2 3

?? \color{Orange}{Warning}:
解構(gòu)賦值重點(diǎn)在于賦值笆檀,賦值的元素是要拷貝出來賦值給變量,賦值的元素本身是不會(huì)改變的

  1. 數(shù)組的解構(gòu)賦值盒至;

    • 賦值元素可以是任意可遍歷的對(duì)象酗洒;
    let [a, b, c] = 'abc'; // ["a","b","c"]
    let [one, two, three] = new Set([1,2,3]);
    
    • 被賦值的變量還可以是對(duì)象的屬性,不局限于單純的變量妄迁;
    let user = {};
    [user.first, user.second] = 'hello world'.split(' ');
    console.log(user.first, user.second); // hello world
    
    • 循環(huán)體中的應(yīng)用寝蹈;
     // 配合Object.entries使用
     let user = {
       name: "Xiao",
       age: 12
     };
     for (let [key, value] of Object.entries(user)) {
       console.log(`${key}:${value}`); // name:Xiao age:12
     }
    
     // map
    let user = new Map();
    user.set("name", "Xiao");
    user.set("age", 12);
    for (let [key, value] of user.entries()) {
      console.log(`${key}:${value}`); // name:Xiao age:12
    }
    
    • 跳過賦值元素;
    let [a, , ,e] = [1,2,3,4];
    console.log(e); // 4
    
    • rest參數(shù)登淘;
    let [name1, name2, ...rest] = ["hello", "world", "hi", "newWorld"];
    console.log(name1); // hello
    console.log(name2); // world
    console.log(rest[0]); // hi
    console.log(rest[1]); // newWorld
    console.log(rest.length); // 2
    

    ?? \color{Orange}{Warning}:
    可以使用rest來接受賦值數(shù)組的剩余元素箫老,不過要確保這個(gè)rest參數(shù)是放在被賦值變量的最后一個(gè)位置上。

    • 默認(rèn)值黔州;
    let [first, second] = [];
    console.log(first); // undefined
    console.log(second) // undefined
    // 也可以給變量賦予默認(rèn)值耍鬓,防止undefined的出現(xiàn)
    let [first = "hello", second = "world"] = ["hi"];
    console.log(first); // hi
    console.log(second); // world  
    
  2. 對(duì)象的解構(gòu)賦值;

    • 基本用法流妻;
    // 在賦值的左側(cè)聲明一個(gè)和Object結(jié)構(gòu)等同的模板牲蜀,然后把關(guān)心屬性的value指定為新的變量
    let options = {
      name: "Title",
      width: 100,
      height: 200,
    };
    let { name, width, height } = options;
    console.log(name); // Title
    console.log(width); // 100
    console.log(height); // 200
    // 也可以用其他的自定義變量名
    let {width: w, height: h, name} = options;
    console.log(w); // 100
    console.log(h); // 200
    console.log(name) // Title
    

    ?? \color{Orange}{Warning}:
    在這個(gè)解構(gòu)賦值的過程中,左側(cè)的"模板"結(jié)構(gòu)要和右側(cè)的Object一致绅这,但是屬性的順序無需一致涣达。

    • 默認(rèn)值;
    let options = {
      name: "Title",
    };
    let { width = 200, height = 100, name } = options;
    console.log(width); // 200
    console.log(height); // 100
    console.log(name); // Title
    
    • rest運(yùn)算符证薇;
    let options = {
     name: "Title",
     width: 100,
     height: 200,
    };
    
    let { name, ...rest } = options;
    console.log(rest.width); // 100
    console.log(rest.height); // 200
    
    • 嵌套對(duì)象度苔;
    // 被賦值的結(jié)構(gòu)和右側(cè)賦值的元素一致
    let options = {
      size: {
        width: 100,
        height: 200,
      },
      items: ["Header", "Menu"],
      extra: true,
    };
    
    let {
      size: { width, height },
      items: [item1, item2],
      name = "Title",
    } = options;
    
    console.log(name); // Title
    console.log(width); // 100
    console.log(height); // 200
    console.log(item1); // Header
    console.log(item2); // Menu
    
  3. 字符串的解構(gòu)賦值;

    // 可以當(dāng)做是數(shù)組的解構(gòu)
    let str = "hello";
    let [a, b, c, d, e] = str;
    console.log(a, b, c, d, e); // h e l l o
    

????????????????????????????
以上是對(duì)解構(gòu)賦值的小小的總結(jié)~
推薦給大家?guī)灼韶洠?br> https://ponyfoo.com/articles/es6-destructuring-in-depth
https://www.sitepoint.com/javascript-ui-frameworks/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浑度,一起剝皮案震驚了整個(gè)濱河市寇窑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箩张,老刑警劉巖甩骏,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異先慷,居然都是意外死亡饮笛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門熟掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缎浇,“玉大人,你說我怎么就攤上這事赴肚∷囟澹” “怎么了二蓝?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長指厌。 經(jīng)常有香客問我刊愚,道長,這世上最難降的妖魔是什么踩验? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任鸥诽,我火速辦了婚禮,結(jié)果婚禮上箕憾,老公的妹妹穿的比我還像新娘牡借。我一直安慰自己,他們只是感情好袭异,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布钠龙。 她就那樣靜靜地躺著,像睡著了一般御铃。 火紅的嫁衣襯著肌膚如雪碴里。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天上真,我揣著相機(jī)與錄音咬腋,去河邊找鬼。 笑死睡互,一個(gè)胖子當(dāng)著我的面吹牛根竿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播就珠,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犀填,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗓违?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤图贸,失蹤者是張志新(化名)和其女友劉穎蹂季,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疏日,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偿洁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沟优。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涕滋。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挠阁,靈堂內(nèi)的尸體忽然破棺而出宾肺,到底是詐尸還是另有隱情溯饵,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布锨用,位于F島的核電站丰刊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏增拥。R本人自食惡果不足惜啄巧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掌栅。 院中可真熱鬧秩仆,春花似錦、人聲如沸猾封。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忘衍。三九已至逾苫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枚钓,已是汗流浹背铅搓。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搀捷,地道東北人星掰。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像嫩舟,于是被迫代替她去往敵國和親氢烘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353