Es6重點(diǎn)總結(jié)

ES6最重要最復(fù)雜的知識(shí)點(diǎn): 1. 類和繼承 2.promise 3. ES6模塊化(在vue中講)

與深拷貝相關(guān)的知識(shí)點(diǎn)

  1. Object.assgin()方法: 可以實(shí)現(xiàn)第一層對(duì)象的深拷貝
  2. 簡(jiǎn)單粗暴的深拷貝
JSON.parse(JSON.stringify(obj))
  1. 完整的深拷貝: 參考網(wǎng)上資料

常見(jiàn)的數(shù)組方法

下面的方法都有回調(diào)函數(shù),回調(diào)的兩個(gè)形參分別為項(xiàng)目值和索引
除了forEach, 其它的方法都需要return

  1. arr.forEach()
  2. arr.map()
  3. arr.filter()
  4. arr.some()
  5. arr.every()
  6. arr.reduce()

let: 聲明塊級(jí)作用域

  • 不存在聲明提前的問(wèn)題
  • 在同一個(gè)塊中,不能重復(fù)聲明
  • 通過(guò)let可獲取正確的索引
    let arr = []
    for (let i = 0; i < 6; i++){
        arr[i] = function(){
            console.log(i)
        }
    }
    arr[3]()

const: 聲明常量

  • const也是塊級(jí)作用域
  • 聲明的同時(shí)要賦值

箭頭函數(shù)

arr.forEach(()=>{})
setInterval(()=>{},1000)

let fun = ()=>{}
let fun = x => {}
let fun = (x,y) => {}
let fun = (x,y) => 3
let fun = (x,y) => ({
        name: 1,
        age: 2
    })

箭頭函數(shù)的this指向

箭頭函數(shù)自身沒(méi)有this,它內(nèi)部的this是定義箭頭函數(shù)所在環(huán)境的this

        box.onclick = function(){
            // console.log(this);
            let i  = 0
            setInterval(()=>{
                this.innerHTML = i;  //this是box
                i++
            },1000)
        }

對(duì)象字面量的簡(jiǎn)寫(xiě)

    let color = 'red',
        age = 18;

    let obj = {
        color,
        age,
        run(){
            console.log('run')
        }
    }

類和繼承

定義父類

class Animal {
    constructor(color){
        this.type = 'animal';
        this.eye = true;
        this.color = color;
    }
    sound(){
        console.log('sound')
    }
}

var ani = new Animal('red')

定義子類

class Cat extends Animal{
    constructor(nickname,age,color){
        super(color);
        this.nickname = nickname;
        this.age = age;
    }
    eat(){
        console.log('eat')
    }
}
var cat = new Cat('小貓咪',5,'white')
cat.sound()

模板字符串

    let color = 'red';
    let str = `this is ${color}`

解構(gòu)賦值

    let obj = {
            title: 'aaaa',
            price: 300,
            discount: 200
        }

    let {title,price} = obj;

展開(kāi)運(yùn)算符

把數(shù)組中的值打散,一個(gè)一個(gè)羅列

        let arr = [34, 56, 78];

        function total(Ch, En, Math) {
            return Ch + En + Math;
        }
        let result = total(...arr)

        let divList = document.querySelectorAll("div");

        //偽數(shù)組可以調(diào)用 forEach,不能調(diào)用其它數(shù)組的遍歷方法
        divList.forEach((el)=>{
            console.log(el);
        })

        var arr = [...divList].map((el)=>{
            return el.innerHTML
        })
        console.log(arr);

默認(rèn)參數(shù)

        function draw(radius=100){
            console.log(radius);
        }
        draw(30)

        // 默認(rèn)(default)參數(shù)必須設(shè)置在最后
        function draw(y,x=2,z=20){
            console.log(x,y,z);
        }

        draw(1)
        draw(1,3)

剩余參數(shù)

        function total(...args){
            console.log(args);
            console.log(args instanceof Array);  //true
        }
        total(23,45)

Symbol數(shù)據(jù)類型

獲取唯一的不會(huì)重復(fù)的變量礁遵,是ES6新增的基本數(shù)據(jù)類型

        // Symbol的應(yīng)用場(chǎng)景

        //第三方的庫(kù)中定義了一個(gè)對(duì)象(對(duì)用戶來(lái)講是隱蔽的)

        let obj = {
            name: '23',
            count() {
                console.log('count');
            }
        }

        // 對(duì)對(duì)象的功能進(jìn)行擴(kuò)展:希望用一個(gè)一定不會(huì)和對(duì)象已有屬性重復(fù)的屬性名

        let count = Symbol();

        obj[count] = function(){
            console.log('數(shù)量');
        }

        obj.count()  // count
        obj[count]();  //數(shù)量

Set類型的數(shù)據(jù)

是ES6中新增的集合的數(shù)據(jù)類型乾蛤,用來(lái)存放數(shù)組允趟。但是蔑匣,數(shù)組的元素不允許重復(fù)

數(shù)組去重

    var arr = [1,2,3,2,5,1]
    var result = [...new Set(arr)]
    console.log(result);

Set常用的API

        1. add
        2. delete
        3. has
        4. clear

for...of語(yǔ)句

  • for: (1)需要明確遍歷次數(shù) (2)不能遍歷對(duì)象恩急,可以遍歷對(duì)象以外的集合 array,偽數(shù)組 (3)可以使用break和continue
  • forEach: (1) 可以遍歷對(duì)象以外的集合 (數(shù)組掸掸,Set, NodeList--->dom集合) (2)不能使用break和continue
  • for...in (1)遍歷對(duì)象 (2)不能直接訪問(wèn)對(duì)象的屬性值 (3)(3)可以使用break和continue
  • 新增的for...of:
    (1) 自定義的對(duì)象不能使用for...of,但大部分原生的數(shù)據(jù)集合都可以使用 (數(shù)組氯庆、字符串、Set類型扰付、Map類型堤撵、NodeList)
    (2)可以使用break和continue
    //作用于數(shù)組
    var arr = ['a','c','d']
        for(let i of arr){
            console.log(i);
        } 
//作用于元素節(jié)點(diǎn)NodeList
    let divList = document.querySelectorAll("div");
        for (let el of divList){
            console.log(el);
        }

Object的API

  1. Object.assign: 合并對(duì)象
  2. Object.keys(): 返回對(duì)象所有鍵組成的集合
        let obj = {
            name: 'Peppa',
            age: 4,
            sex: '女'
        }
        // ["name","age","sex"]
        console.log(Object.keys(obj));

Map類型的數(shù)據(jù)

類似于對(duì)象,用來(lái)存儲(chǔ)鍵值對(duì)羽莺。

對(duì)象只能使用字符串作為屬性名实昨,而Map可以使用任意類型的數(shù)據(jù)做為屬性名

//第一個(gè)鍵是"a",值是1, 第二個(gè)鍵是b,值是2
        var map1 = new Map([["a",1],["b",2]]);
        console.log(map1);

Map的API

        屬性: size 
        方法: set , get , has, delete ,clear

for...of 遍歷

    var map1 = new Map([["a", 1], ["b", 2]]);
        
        //只遍歷鍵
        for (let key of map1.keys()){
            console.log(key);
        }

        // 只遍歷值
        for (let val of map1.values()){
            console.log(val);
        }


        // val是數(shù)組,存儲(chǔ)了每一個(gè)的鍵和值
        for (let val of map1){
            console.log(val[0]);
            console.log(val[1]);
        }

        //同時(shí)返回鍵值對(duì)
        for (let [key,value] of map1){
            console.log(key);
            console.log(value);
        }

        // 等價(jià)于上面的寫(xiě)法
        for (let [key,value] of map1.entries()){
            console.log(key);
            console.log(value);
        }

Promise:

  • promise用來(lái)解決回調(diào)地獄的問(wèn)題盐固,把異步的代碼用同步的方式來(lái)實(shí)現(xiàn)

  • Promise 是異步編程的一種解決方案荒给,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。
    它由社區(qū)最早提出和實(shí)現(xiàn)刁卜,ES6 將其寫(xiě)進(jìn)了語(yǔ)言標(biāo)準(zhǔn)锐墙,統(tǒng)一了用法,原生提供了Promise對(duì)象长酗。

  • 一個(gè)Promise的三種狀態(tài)
    pending: 初始狀態(tài)溪北,既不是成功,也不是失敗狀態(tài)夺脾。
    fulfilled: 意味著操作成功完成之拨。
    rejected: 意味著操作失敗。

  • Promise構(gòu)造函數(shù)接受一個(gè)函數(shù)作為參數(shù)咧叭,該函數(shù)的兩個(gè)參數(shù)分別是resolve和reject蚀乔。它們是兩個(gè)函數(shù),由 JavaScript 引擎提供菲茬,不用自己部署吉挣。
    Resolve函數(shù)的作用是,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤俺晒Α保磸?pending 變?yōu)?resolved)婉弹,在異步操作成功時(shí)調(diào)用睬魂,并將異步操作的結(jié)果,作為參數(shù)傳遞出去镀赌;
    Reject函數(shù)的作用是氯哮,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤笆 保磸?pending 變?yōu)?rejected),在異步操作失敗時(shí)調(diào)用商佛,并將異步操作報(bào)出的錯(cuò)誤喉钢,作為參數(shù)傳遞出去姆打。

  • Promise實(shí)例生成以后,可以用then方法分別指定resolved狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù)肠虽。

    ```
        // 需求: ajax1執(zhí)行完再執(zhí)行ajax2,ajax2執(zhí)行完再執(zhí)行task
        function ajax1() {
            setTimeout(function () {
                console.log('ajax1');
            }, 1000)
        }
        function ajax2() {
            setTimeout(function () {
                console.log('ajax2');
            }, 2000)
        }
        function task() {
            console.log('task');
        }
    ```

用Promise實(shí)現(xiàn)

       var flag1 = true;
       var flag2 = false;

       function error(err) {
           console.log(err);
       }
       function ajax1() {
           return new Promise((resolve, reject) => {
               setTimeout(function () {
                   if (flag1) {
                       resolve('ajax1的結(jié)果')
                   } else {
                       reject('ajax1錯(cuò)誤')
                   }
               }, 1000)
           })
       }

       function ajax2(data) {
           return new Promise((resolve, reject) => {
               setTimeout(function () {
                   console.log('ajax2接收ajax1的參數(shù)', data);
                   if (flag2){
                       resolve()
                   }else{
                       reject('ajax2錯(cuò)誤')
                   }
               }, 2000)
           })
       }

       function task() {
           console.log('task');
       }

       ajax1()
           .then(ajax2)
           .then(task)
           .catch(error)

Promise.all() Promise.race()

Promise.all() 兩個(gè)異步操作都成功完成后幔戏,再執(zhí)行的邏輯
Promise.race() 最先得到結(jié)果的異步操作執(zhí)行成功,即執(zhí)行下面的邏輯
all()和race()中的參數(shù)必須是promise實(shí)例

   Promise.all([ajax1(),ajax2()])
           .then(function(data){
               console.log('兩個(gè)請(qǐng)求都成功后的數(shù)據(jù)',data);
               task(data)
           })
           .catch(err)
   Promise.race([ajax1(), ajax2()])
           .then(function (data) {
               console.log('請(qǐng)求返回最快的任務(wù)的結(jié)果', data);
               task(data)
           })
           .catch(err)

async和await的用法

  • async: 定義一個(gè)異步函數(shù),消除promise中then的鏈?zhǔn)秸{(diào)用 税课,讓代碼更加清晰评抚,優(yōu)雅
  • await后面接一個(gè)會(huì)return new promise的函數(shù)并執(zhí)行它
  • await只能放在async函數(shù)里
  • async函數(shù)通過(guò)try...catch處理失敗時(shí)要執(zhí)行的邏輯
    var flag1 = false;
        var flag2 = true;
        function ajax1() {
            return new Promise((resolve, reject) => {
                setTimeout(function () {
                    console.log('ajax1任務(wù)執(zhí)行完畢');
                    if (flag1) {
                        resolve('ajax1的結(jié)果')
                    } else {
                        reject('ajax1錯(cuò)誤')
                    }
                }, 1000)
            })
        }
        function ajax2(data) {
            return new Promise((resolve, reject) => {
                setTimeout(function () {
                    console.log('ajax2', data);
                    console.log('ajax2任務(wù)執(zhí)行完畢');
                    if (flag2) {
                        resolve('ajax2的結(jié)果')
                    } else {
                        reject('ajax2錯(cuò)誤')
                    }
                }, 2000)
            })
        }
        function task(data) {
            console.log('task任務(wù)執(zhí)行完畢');
            console.log('task', data);
        }
       

        async function render() {
            try {
                let result1 = await ajax1()
                await ajax2(result1)
                task()
            }catch(err){
                console.log('catch',err);
            }
        }
        render()

Object.defineProperty()

定義對(duì)象的屬性

let obj = {
    name: '西游記',
    addTime: '739754975945489'
}

//必須使用一個(gè)臨時(shí)變量,來(lái)存儲(chǔ)name屬性的值
let temp = obj.name;


// 攔截器
Object.defineProperty(obj,"name",{
    //存取器
    get: function(){
        console.log('get');
        //get中一定要有return,return的結(jié)果即為name屬性的新值
        return "《" + temp + "》"
    },
    set: function(newVal){
        console.log('set');
        temp = newVal;
    }
})

obj.name = "窗邊的小豆豆";
console.log(obj.name);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伯复,一起剝皮案震驚了整個(gè)濱河市慨代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啸如,老刑警劉巖侍匙,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異叮雳,居然都是意外死亡想暗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)帘不,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)说莫,“玉大人,你說(shuō)我怎么就攤上這事寞焙〈⑾粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵捣郊,是天一觀的道長(zhǎng)辽狈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呛牲,這世上最難降的妖魔是什么刮萌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮娘扩,結(jié)果婚禮上着茸,老公的妹妹穿的比我還像新娘。我一直安慰自己琐旁,他們只是感情好涮阔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著旋膳,像睡著了一般澎语。 火紅的嫁衣襯著肌膚如雪途事。 梳的紋絲不亂的頭發(fā)上验懊,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天擅羞,我揣著相機(jī)與錄音,去河邊找鬼义图。 笑死减俏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碱工。 我是一名探鬼主播娃承,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怕篷!你這毒婦竟也來(lái)了历筝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤廊谓,失蹤者是張志新(化名)和其女友劉穎梳猪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒸痹,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡春弥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叠荠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匿沛。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖榛鼎,靈堂內(nèi)的尸體忽然破棺而出逃呼,到底是詐尸還是另有隱情,我是刑警寧澤者娱,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布蜘渣,位于F島的核電站,受9級(jí)特大地震影響肺然,放射性物質(zhì)發(fā)生泄漏蔫缸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一际起、第九天 我趴在偏房一處隱蔽的房頂上張望拾碌。 院中可真熱鬧,春花似錦街望、人聲如沸校翔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)防症。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔫敲,已是汗流浹背饲嗽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奈嘿,地道東北人貌虾。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像裙犹,于是被迫代替她去往敵國(guó)和親尽狠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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