ES6 變量的結構賦值谬擦,解構賦值,應用場景

基于ES6標準入門(第3版)這本書的筆記
要學習angula烁登,vue怯屉,react等新的前端框架,必須先熟悉ES6的語法


數(shù)組的結構賦值

基本用法

es6允許按照一定是模式從數(shù)組和對象中提取值饵沧,然后對變量進行賦值,這個過程稱為解構

{
    let a = 1;
    let b = 2;
    let c = 3;

    let [d,e,f] = [4,5,6];
    console.log(d);
    console.log(e);
    console.log(f);
    console.log('-----------------');

    let [a1,[b1,c1]] = [7,[8,9]];
    console.log(a1);
    console.log(b1);
    console.log(c1);
    console.log('-----------------');

    let [a2, ,c2] = [1,2,3];
    console.log(a2);
    console.log(c2);
    console.log('-----------------');

    let [a3,...c3] = [1,2,3];
    console.log(a3);
    console.log(c3);
    console.log('-----------------');
}

上面的代碼其實經(jīng)過編譯器編譯會出現(xiàn)如下代碼

'use strict';

{
    var a = 1;
    var b = 2;
    var c = 3;

    var d = 4,
        e = 5,
        f = 6;

    console.log(d);
    console.log(e);
    console.log(f);
    console.log('-----------------');

    var a1 = 7,
        b1 = 8,
        c1 = 9;

    console.log(a1);
    console.log(b1);
    console.log(c1);
    console.log('-----------------');

    var _ref = [1, 2, 3],
        a2 = _ref[0],
        c2 = _ref[2];

    console.log(a2);
    console.log(c2);
    console.log('-----------------');

    var a3 = 1,
        c3 = [2, 3];

    console.log(a3);
    console.log(c3);
    console.log('-----------------');
}
}

控制臺會輸出


image.png

如果解構不成功赌躺,變量值就是undefined

{
    let [a,b] = [a];
    console.log(b);// 輸出undefined
}
默認值

解構賦值允許指定默認值

{
    let [a = 1] = [];
    console.log(a);
    console.log('------------');

    let [b,c = 2] =[1];
    console.log(b);
    console.log(c);
    console.log('------------');

    let [b1,c1 = 2] =[1,3];
    console.log(b1);
    console.log(c1);
    console.log('------------');
}

es6內(nèi)部執(zhí)行嚴格的相等于(===)判斷一個位置是否有值狼牺,如果賦了默認值,然后后面有有值礼患,會取后面的賦值

image.png

對象的結構賦值

基本用法

解構可以用于數(shù)組是钥,也可以用于對象掠归,和數(shù)組按照順序賦值不同,對象解構是按照變量名來的

{
    let {a,b} ={b:1,a:2}
    console.log(a);
    console.log(b);
    console.log('------------');
}
image.png

如果變量名不一致悄泥,必須取別名才行

{
    let obj ={first:'hello',last:'word'}
    let {first:f,last:l} = obj;
    console.log(f);
    console.log(l);
    console.log('------------');
}

同樣虏冻,對象也可以嵌套賦值

{
    let obj = {
        msg:[
            'hello',
            {m2:'word'}
        ]
    }
    let {msg:[m1,{m2}]} = obj;
    console.log(m1);
    console.log(m2);
}
image.png

對象賦值也可以設置默認值,如果設置了默認值后再賦值弹囚,取后面的賦值

{
    let {a1 =1} = {}
    console.log(a1);
    console.log('------');

    let {a2,b2 = 2} ={a2:1};
    console.log(a2);
    console.log(b2);
    console.log('------');

    let {a3: b3 =3 } = {a3 :10};
    console.log(b3);
    console.log('------');

}
image.png

對象賦值也可通過對象名點屬性名點方式取出來

{
    let obj ={first:'hello',last:'word'}

    console.log(obj.first);
    console.log(obj.last);
    console.log('------------');

}

還有就是需要特別注意的是如果一個聲明了的變量還要進行解構賦值厨相,需要特別注意,下面這種寫法是會報錯的鸥鹉,因為會吧{x}識別為代碼塊

{
    let x;
    {x} = {x:1};
}

正確寫法

{
    let x;
    ({x} = {x:1});
    console.log(x);
}

解構賦值也可以將對象的方法屬性賦值到一個變量上面蛮穿,控制臺會輸出2

{
    let {a,b,c} = {a:1,b:2,c:3};
    let obj = {a,b,c};
    console.log(obj.b);
}

因為數(shù)組本質是特殊的對象,所以可以對數(shù)組進行對象屬性解構毁渗,控制臺會輸出1践磅,3

{
    let arr =[1,2,3];
    let{0:first,[arr.length-1]:last} = arr;
    console.log(first);
    console.log(last);
}

字符串的解構賦值

字符串解構賦值就是把字符串轉換成一個類似數(shù)組的結構,控制臺會輸出3

{
    let[a,b,c,d] = '1234';
    console.log(c);
}

數(shù)值和布爾值的解構賦值

因為數(shù)值和布爾值都嘔toString屬性灸异,因此變量都能取到值府适,解構賦值的規(guī)則是,只要等號右邊的值不是對象或者數(shù)組肺樟,就先轉換為對象

{
    let{toString:s}=123;
    console.log(s == Number.prototype.toString);

    let{toString:y}=true;
    console.log(y == Boolean.prototype.toString);
}

函數(shù)參數(shù)的解構賦值

下面代碼控制臺會輸出3细溅,因為對于代碼內(nèi)部來說,在傳入?yún)?shù)的時候儡嘶,數(shù)組就被解構成了變量x,y

function add([x,y]) {
    return x + y;
}

console.log(add([1,2]));

函數(shù)參數(shù)同樣可以設置默認值喇聊,可以從輸出看出遵循一樣的規(guī)則

function show({x = 0, y = 0} = {}) {
    return [x,y];
}

console.log(show({x:1,y:2}));
console.log(show({x:1}));
console.log(show({}));
image.png

圓括號的使用

在所有變量的聲明是不能使用圓括號的,只有在賦值語句的非模式部分可以使用圓括號

{
    [(a)] = [1];

    ({p:(d)} = {});
    
    [(parseInt.prop)] = [3];
}

解構的用途

變量值交換
{
    let x = 1;
    let y = 2;
    [x,y] = [y,x];
}
函數(shù)參數(shù)返回對象或者數(shù)組
function backArr() {
    return [1,2,3];
}

let [a, b, c] = backArr();

function backObj() {
    return {
        fast:'hello',
        last:'word'
    }
}

let {fast,last} = backObj();
解析json對象

這樣就可以直接使用name蹦狂,age

{
    let jsonData = {name :'小明',age:12};
    let {name,age} = jsonData;
}
函數(shù)參數(shù)默認值

前面有舉例誓篱,就不重復列舉了

遍歷map

key和value就可以直接使用

{
    var map = new Map();
    map.put('k1','v1');
    map.put('k2','v2');
    map.put('k3','v3');

    for(let [key,value] of map){
        console.log(key);
        console.log(value)
    }
}
模塊加載指定輸入方法
const {SourceMapConsumer,SourceNode } = require("source-map");
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凯楔,隨后出現(xiàn)的幾起案子窜骄,更是在濱河造成了極大的恐慌,老刑警劉巖摆屯,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻遏,死亡現(xiàn)場離奇詭異,居然都是意外死亡虐骑,警方通過查閱死者的電腦和手機准验,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廷没,“玉大人糊饱,你說我怎么就攤上這事〉呃瑁” “怎么了另锋?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵滞项,是天一觀的道長。 經(jīng)常有香客問我夭坪,道長文判,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任室梅,我火速辦了婚禮戏仓,結果婚禮上,老公的妹妹穿的比我還像新娘竞惋。我一直安慰自己柜去,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布拆宛。 她就那樣靜靜地躺著嗓奢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浑厚。 梳的紋絲不亂的頭發(fā)上股耽,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音钳幅,去河邊找鬼物蝙。 笑死,一個胖子當著我的面吹牛敢艰,可吹牛的內(nèi)容都是我干的诬乞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼钠导,長吁一口氣:“原來是場噩夢啊……” “哼震嫉!你這毒婦竟也來了?” 一聲冷哼從身側響起牡属,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤票堵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逮栅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悴势,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年措伐,在試婚紗的時候發(fā)現(xiàn)自己被綠了特纤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡废士,死狀恐怖叫潦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情官硝,我是刑警寧澤矗蕊,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站氢架,受9級特大地震影響傻咖,放射性物質發(fā)生泄漏。R本人自食惡果不足惜岖研,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一卿操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孙援,春花似錦害淤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至础淤,卻和暖如春崭放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸽凶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工币砂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玻侥。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓决摧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凑兰。 傳聞我的和親對象是個殘疾皇子掌桩,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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