<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 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ì)m.sdgs6788.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è)人資料

          存檔

          久久综合日本熟妇| a级毛片无码兔费真人久久| 国产福利电影一区二区三区,免费久久久久久久精 | 国产精品久久久久影院嫩草| 香蕉久久夜色精品国产尤物| 久久久久亚洲AV无码去区首| 欧美日韩中文字幕久久久不卡 | 久久国产精品无码网站| 国产精品久久久久…| 久久Av无码精品人妻系列| 无码人妻精品一区二区三区久久| 久久久亚洲欧洲日产国码是AV| 波多野结衣久久精品| 少妇人妻88久久中文字幕| 久久精品卫校国产小美女| 国内精品伊人久久久久777| 热re99久久精品国99热| 久久精品国产亚洲精品2020| 国产精品久久久久久一区二区三区 | 久久天堂AV综合合色蜜桃网| 久久久无码人妻精品无码| 久久发布国产伦子伦精品| 狠狠色丁香久久综合五月| 国产高清美女一级a毛片久久w| 久久嫩草影院免费看夜色| 亚洲欧美国产精品专区久久| 亚洲AV无码久久精品蜜桃| 99久久精品影院老鸭窝| 久久se精品一区二区影院| 精品久久久久久久国产潘金莲| 九九精品99久久久香蕉| 久久精品一区二区三区中文字幕| 狠狠综合久久AV一区二区三区| 久久亚洲精品中文字幕| 久久婷婷国产麻豆91天堂| 亚洲精品第一综合99久久| 99国产精品久久久久久久成人热| 蜜桃麻豆www久久国产精品| 国产精品久久久亚洲| 亚洲欧洲中文日韩久久AV乱码| 国产亚洲精品美女久久久|