<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • ECMAScript6學(xué)習(xí)筆記

    2019-6-27    seo達(dá)人

    如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

    這周萌芽決定好好學(xué)習(xí)一下ES6,感興趣的小伙伴們來一起學(xué)習(xí)吧~
    ES6(ES2015)——IE10+、Chrome、FireFox、移動(dòng)端、Node.js

    編譯轉(zhuǎn)換

    1.在線轉(zhuǎn)換(browser.js)
    2.提前編譯

    ES6新特性
    1.變量
    2.函數(shù)
    3.數(shù)組
    4.字符串
    5.面向?qū)ο?br /> 6.promise(串行化異步交互)
    7.generator(把同步拆分為異步)
    8.模塊化(ES6自帶模塊化)

    變量
    var
    1.可以重復(fù)聲明
    2.無法限制修改
    3.沒有塊級(jí)作用域(沒有語法塊?。?br />
    let 不能重復(fù)聲明(變量,可以修改)
    const 不能重復(fù)聲明(常量,不能修改)

    塊級(jí)作用域,let在外部無法調(diào)用

    函數(shù)
    箭頭函數(shù) =>

    function show(){
    //這是我們平常的函數(shù)
    }
    let show=()=>{
    //箭頭函數(shù)
    }
    //區(qū)別不大,把function省略掉換成箭頭,主要就是為了方便,可傳參

    1.如果只有一個(gè)參數(shù),()可以省去。

     let show=a=>{
            return a*2
        }

    2.如果只有一個(gè)return,{}可以省略

       let show=a=>a*2;
       let arr = [15,2,37,11,67,4,6]; //排序
      
       arr.sort((n1,n2)=>{
            return n1-n2;
        })
        
        arr.sort((n1,n2)=> n1-n2 );
        console.log(arr)


    函數(shù)的參數(shù)
    1.參數(shù)擴(kuò)展/展開
    2.默認(rèn)參數(shù)

    參數(shù)的擴(kuò)展
    1.收集參數(shù)

     function arrData(a,b,...args) {
            alert(a);
            alert(b);
            alert(args);
        }
        *注意:Rest Parameter必須是最后一個(gè)(除其他語言)
    1

    2.展開數(shù)組

        arrData(...arr);       //等價(jià)于 arrData(1,2,3);
    1
    這仨點(diǎn)兒【…】代表把數(shù)組內(nèi)容掏出來放這。

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

    //jQuery中的默認(rèn)參數(shù)
    $('#div1').animate({width:'200px'});
    $('#div1').animate({width:'200px'},1000);

    //ES6默認(rèn)傳參
       function showOne(a,b=10,c=5) {
            console.log(a,b,c)
        }

    解構(gòu)賦值
    1.左右兩邊解構(gòu)必須一樣
    2.右邊必須是個(gè)合法的東西
    3.聲明和賦值不能分開(必須在一句話里完成)

        let  [one,two,three] = [10,20,30];
        let  {one1,two2,three3} = {a:10,b:20,c:30};

    數(shù)組
    map 映射(一個(gè)對(duì)一個(gè)。傳幾個(gè)返回幾個(gè))

    let result = arr.map(function (item) {
        return item*2;
    });//簡寫一下
    let result = arr.map(item=>item*2 );

    //判斷考試成績
    let score = [19,18,78,65,100];
    let result = score.map(item=>item>=60?'及格':'不及格');

    reduce 匯總(算個(gè)總數(shù),算個(gè)平均數(shù))

    //tmp:上次求和總和,為兩兩相加,如果之前沒有結(jié)果則為傳進(jìn)來的數(shù)組的第一個(gè)數(shù)。
    //itme:當(dāng)前的數(shù)。
    //index:執(zhí)行的次數(shù)。

       let result = arr.reduce(function (tmp, item, index) {
           return tmp + item;
        });
        //簡寫
        arr.reduce((tmp, item, index)=>tmp + item);

    filter 過濾器(篩選掉不需要的)

     let result = arr.filter(item=>{
            if (item%2 == 0){
                return true;
            } else {
                return false;
            }
        });
        
     //簡寫
    let result = arr.filter(item=>item%2 == 0);
           
    //***萌芽在這里提一下!json和之前的item都不是固定的,可以隨便命名。意思都是當(dāng)前的值!

     let arrProce = [
            {title:'男士襯衫',price:75},
            {title:'女士包包',price:5000},
            {title:'男士包包',price:20},
            {title:'女士鞋',price:2500}
        ];
        let result = arrProce.filter(jsom=>json.price >= 2000);
        console.log(result);

    forEach循環(huán)(迭代)

       arr.forEach((item,index)=>{
            alert(index+":"+item)
        })

    字符串
    1.多了倆新方法
    startsWith(); //判斷開頭,返回布爾類型
    endWith(); //判斷結(jié)尾,返回布爾類型

    let str='hello,world!'
    str.startsWith('h')
    str.endWith('!')      //返回true

    2.字符串模板
    字符串連接
    2.1直接把東西塞進(jìn)字符串里面 ${東西}
    2.2可以折行

    <h1>${title}</h1>
    <p>${content}</p>

    ES6的面向?qū)ο?br /> 1.class關(guān)鍵字,構(gòu)造器和類分開啦。
    2.class里面直接加方法。

        class User{
            constructor(name,password){   //構(gòu)造器
                this.name = name;
                this.password = password;
            }

            showName(){
                alert(this.name);
            }
            showPass(){
               alert(this.password);
            }
        }

        var user = new User('萌芽子','123456');
        user.showName();
        user.showPass();

    繼承

        class VipUser extends User{
            constructor(name,password,age){
            super(name,password);          //super 超類
            this.age = age;
            }
            showAge(){
                alert(this.age)
            }
        }
        var user = new VipUser('萌芽子','123456','18歲');
        user.showName();
        user.showPass();
        user.showAge();

    不得不說作為一只JAVA汪,這種寫法真得勁!

    面向?qū)ο蟮膽?yīng)用
    React
    1.組件化(class)
    2.JSX(JSXbabelbrowser.js)
    JSX屬于JS的擴(kuò)展版

    class Test extends React.Component{
     constructor(...args){
     super(...args);
     }
    render(){
    return <li>{this.props.str}</li>         //props:屬性
    }
    }

    window.onload = function(){
    let oDiv = document.getElementById('div1');

    ReactDOM.render(
    <ul>
    <Item str="你好"></Item>
    <Item str="世界!"></Item>
    </ul>
    oDiv
    );
    };


    打卡,下次就學(xué)這個(gè)了!===============

    json
    1.JSON對(duì)象

    JSON.stringify() json轉(zhuǎn)字符串

     let json = {a:10, b:20};//JSON.stringify   字符串化
        let str = 'http://www.baidu.com/path/user?data='+JSON.stringify(json);
        str = 'http://www.baidu.com/path/user?data='+encodeURIComponent(JSON.stringify(json));
        alert(str)
    1
    2
    3
    4
    JSON.parse() 字符串轉(zhuǎn)json

        let str = '{"a":12,"b":20,"c":"可樂"}';
        let json = JSON.parse(str);
        console.log(json);

    2.簡寫
    在新版的ES6當(dāng)中名字一樣的鍵(key)和值(value)可以只寫一個(gè)。

        let a = 12;
        let b = 5;
        let json = {a,b,c:21};

    簡化了JSON中的方法。

     let json ={
            a:12,
            showJson(){
                alert(this.a);
            }
        };
        json.showJson();

    json的標(biāo)準(zhǔn)寫法:
    1.只能用雙引號(hào)
    2.所有的名字都必須用引號(hào)包起來(所有的key都必須是雙引號(hào))

    {a:12,b:5}     × 錯(cuò)誤的寫法
    {"a":"萌萌萌","b":"芽子"}     √ 正確的寫法
    1
    2
    Promise(承諾)
    異步:操作之間沒啥關(guān)系,同時(shí)進(jìn)行多個(gè)操作
    同步:同時(shí)只能做一件事
    優(yōu)缺點(diǎn):
    異步:代碼更復(fù)雜
    同步:代碼簡單
    Promise——消除異步操作
    *用同步一樣的方式來書寫異步代碼;

        let p = new Promise(function (resolve,reject) {
            //異步代碼
            //resolve——成功
            //reject——失敗
        })

    -----------------------------------------訪問我們的arr.txt文件,這里用到了jQuery的ajax就不詳細(xì)介紹了。
      let p = new Promise(function (resolve, reject) {
            //異步代碼
            //resolve——成功
            //reject——失敗
            $.ajax({
                url: 'arr.txt',
                dataType: 'json',
                success(arr) {
                    resolve(arr);
                }, error(err) {
                    reject(err);
                }
            })
        });
        //結(jié)果
        p.then(function (arr) {
            alert('成功啦' + arr)
        }, function (err) {
            alert('失敗了' + err)
            console.log(err)
        });
    -----------------------------------------------多個(gè)請(qǐng)求地址
      Promise.all([p1,p2]).then(function (arr){
            let [res1,res2] = arr;
            alert('全部成功啦');
            console.log(res1);
            console.log(res2);
        },function (){
            alert('至少有一個(gè)失敗了');
        });
        ----------------------------再簡化
        function createPromise(url){
        return new Promise(function (resolve, reject) {
                $.ajax({
                    url,
                    dataType: 'json',
                    success(arr) {
                        resolve(arr);
                    }, error(err) {
                        reject(err);
                    }
                })
            });
        }
      Promise.all([
            createPromise('arr.txt'),
            createPromise('json.txt')
        ]).then(function (arr){
            let [res1,res2] = arr;
            alert('全部成功啦');
            console.log(res1);
            console.log(res2);
        },function (){
            alert('至少有一個(gè)失敗了');
        });
    ----------------------完美寫法
     Promise.all([
            $.ajax({url:'arr.txt',dataType:'json'}),
            $.ajax({url:'json.txt',dataType:'json'})
        ]).then(function (results) {
            let [arr,json] = results;
            alert("成功了");
            console.log(arr,json)
        },function () {
            alert("失敗了")
        })

    我們有了promise之后的異步:

     Promise.all([ $.ajax(),$.ajax() ]).then( results=>{
       //對(duì)了
        },err=> {
       //錯(cuò)了
        })

    Promise.all (必須全部成功)
    Promise.race(同事讀多個(gè)數(shù)據(jù),即使失敗也沒關(guān)系)

    generator(生成器)
    普通函數(shù) - 一路到底執(zhí)行不可中斷
    generator函數(shù) - 可中斷

     function * show() {
            alert('a');
            yield;//暫時(shí)放棄執(zhí)行
            alert('b');
        }
        let genObj = show();
        genObj.next();
        genObj.next();

    yield
    yield傳參

      function * show(num1,num2) {
            alert(`${num1},${num2}`);//es6
            alert('a');
           let a = yield;//暫時(shí)放棄執(zhí)行
            console.log(a);
            alert('b');
        }
        let genObj = show(99,88);
        genObj.next(12);//第一個(gè)next無法給yield傳參的,廢的
        genObj.next(5);

    yield返回

      function *show() {
            alert('a');
            yield 12;
            alert('b');
            return 55;
        }

        let gen = show();
        let res1 = gen.next();
        console.log(res1);      //{value: 12, done: false}
        let res2 = gen.next();
        console.log(res2);//{value: undefined, done: true}  加了return  {value: 55, done: true}



    還沒做的菜叫函數(shù)參數(shù),過程是yield之前函數(shù)里面的東西,干凈的菜,切好的菜是中間過程也就是yield,最終我們將它返回出去!不得不說這圖很生動(dòng)。
    異步操作
    1.回調(diào)

    $.ajax({
        url:'url',
        dataType:'json',
        success(data){
            $.ajax({
                url:'xxx',
                dataType: 'json',
                success(data) {
                    //完事兒了
                },error(err) {
                    alert('錯(cuò)了')
                }
            })
        },error(){
            alert('失敗')
        }
    })

    2.Promise

    Promise.all([
            $.ajax({url:xxx,dataType:'json'}),
            $.ajax({url:xxx,dataType:'json'}),
            $.ajax({url:xxx,dataType:'json'})
        ]).then(results=>{
            //完事兒
        },err=>{
            //錯(cuò)誤的
        })

    3.generator

    runner(function  *(){
    let data1 = yield $.ajax({ulr:xxx,dataType:'json'});
    let data2 = yield $.ajax({ulr:xxx,dataType:'json'});
    let data3 = yield $.ajax({ulr:xxx,dataType:'json'});
    })
    1
    2
    3
    4
    5
    generator(不能用=>函數(shù))
    邏輯判斷下非常好用。
    Promise:一次讀一堆。
    generator:邏輯性。

    runner(function *(){
    let userData = yield $.ajax({url:'getUserData',dataType:'json'});
    if(userData.type == 'VIP'){
    let items = yield $.ajax({url:'getVIPItems',dataTyoe:'jsom'});
    }else{
    let items = yield $.ajax({url:'getItems',dataTyoe:'jsom'});
          }
    //生成...
    }
    })

    總結(jié)
    1.變量:
    var:能重復(fù)聲明、函數(shù)級(jí)
    let: 嚴(yán)格的,不能重復(fù)聲明,塊級(jí),變量
    const:嚴(yán)格的,不能重復(fù)聲明,塊級(jí),常量

    2.箭頭函數(shù)
    2.1方便
    i.如果只有一個(gè)參數(shù),()可以省
    ii.如果只有一個(gè)return,{}可以省
    2.2修正了this
    this相對(duì)正常點(diǎn)

    3.參數(shù)擴(kuò)展
    …能收集
    …能擴(kuò)展
    默認(rèn)參數(shù)

    4.數(shù)組方法
    map 映射
    reduce 匯總
    filter 過濾
    forEach 循環(huán)

    5.字符串
    starsWith/endWith
    字符串模板:${a}xxx

    6.Promise
    封裝異步操作
    Promise.all([]);

    7.generator
    function *show(){
    yield
    }

    8.JSON
    JSON.stringify({ a :12,b :5}) => {“a”:12,“b”:5}
    JSON.parse(’{“a”:12,“b”:5}’) =>{a:12,b:5}//字符串

    9.解構(gòu)賦值
    let [a,b,c] = [12,5,8];
    左右結(jié)構(gòu)一樣,右邊是個(gè)合法的東西,連生命帶賦值一次完成。

    10.面向?qū)ο?br /> class Test(){
    constructor(xxx){
    this = xxx
    }
    方法1(){
    }
    方法2(){
    }
    }
    繼承
    class Test2 extends Test(){
    constructor(){
    super();
    }
    }

    談?wù)凟S7和ES8
    1.數(shù)組includes
    數(shù)組是否包含某個(gè)東西

    2.數(shù)組 keys/values/entries
    for…in(循環(huán)數(shù)組)
    對(duì)于數(shù)組來講循環(huán)的是下標(biāo)
    對(duì)于json循環(huán)的是key

    for…of(循環(huán)迭代器)
    對(duì)于數(shù)組循環(huán)的是值
    不能用于JSON,json并不是迭代器

    keys = >所有的key拿出來 0,1,2,3…
    values =>所有的values拿出來 23,5,8,1…
    entries =>所有的鍵值對(duì)拿出來 {key:0,value:a}

    let arr = [12,5,8,99];
    for(let [key,value] of arr.entries()){
    alert(`${key} = ${value}`);

    預(yù)覽版,目前極大多數(shù)瀏覽器都不支持,以后可能會(huì)支持,了解一下就好。
    藍(lán)藍(lán)設(shè)計(jì)www.skdbbs.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。

    日歷

    鏈接

    個(gè)人資料

    存檔

    主站蜘蛛池模板: 2024最新国产精品一区| 国产精品热久久毛片| 国产精品91视频| 午夜精品久久久久成人| 91亚洲精品麻豆| 国产区精品一区二区不卡中文| 久久精品无码免费不卡| 97久久精品人人做人人爽| 精品欧洲av无码一区二区| 久久精品国产亚洲av瑜伽| 91麻豆精品一二三区在线| 99re这里只有精品国产精品| 亚洲精品少妇30p| 亚洲?V无码成人精品区日韩| 国产精品自产拍在线18禁| 久久九九青青国产精品| 国产精品国色综合久久| 久久夜色精品国产噜噜麻豆| 亚洲精品无码激情AV| 精品久久人人妻人人做精品| 99免费精品国产| 999国产精品视频| 亚洲精品线在线观看| 精品久久一区二区三区| 91精品国产色综合久久| 99久久er这里只有精品18| 精品午夜福利在线观看| 久久久久99精品成人片试看| 无码国产精品一区二区免费16 | 欧美日韩精品在线| 国产成人精品久久二区二区| 99久久99这里只有免费费精品 | 成人久久精品一区二区三区| 国产精品无码日韩欧| 亚洲一级Av无码毛片久久精品| 亚洲AV成人精品日韩一区18p| 日韩精品一区二区三区不卡| 四虎影院国产精品| 亚洲国产成人a精品不卡在线| 亚洲&#228;v永久无码精品天堂久久 | 亚洲精品国产精品乱码不卡√|