ES6基本知識

Es6知識點

  1. ES5 變量

    var 聲明

    1.可以重複聲明 不報錯

    var a=12;
    var a=5;
    alert(a) //5
    

    2.沒有塊級作用域(語法塊)

    {
    	變量=123
    }
    for(...){
    	var a=12
    }
    alert(a) 12
    

    ES6語法 let const 不能重複聲明

    let 是變量

    let a=12;
    a=5
    alert(a)  5
    

    const 常量

    const a=12
    a=5
    alert(a) 報錯
    

    兩者皆爲塊級作用域 更容易合作開發

    if(true){
        let a=1;
        const b=1;
    }
    alert (a=1)報錯 未定義
    alert (b=1)報錯 未定義
    
  2. 函數

    箭頭函數

    1.如果只有一個參數()可以省

    resp=>{
    console.log(resp)
    }
    let show=(n1,n2)=>{
        alert(n1+n2)
    }
    

    2.如果只有一個返回值

    (a)=>a*2
    等價
    (a)=>{
        return a*2
    }
    

    3.this的指向問題(重點)

    普通函數:根據調用我的人(誰調用我,我的this就指向誰)
    
    箭頭函數:根據所在的環境(我再哪個環境中,this就指向誰)
    

    4.Es6的傳參問題 …args 必須放最後

    let show=(a,b,...args)=>{
       
        alert(a,b,...args)
    }
        
    show(12,23,54,)
    

    5.展開數組

    let arr=[1,2,3];
    ...arr;
    let show=(a,b,c)=>{
        alert(a)
        alert(b)
        alert(c)
    }
    show(1,2,3)
    等價於
    show(...arr)
    

    6.解構賦值(兩邊結構一致)語法糖

    //原始
    let arr=[1,2,3]
    let a=arr[0];
    let b=arr[1];
    let c=arr[2]
    
    //一一對應,右邊的給左邊 
    let [a,b,c]=[1,2,3]
    let {a,c,d}={a:12,c:13,d:14}
    
    //----------------------------------------
    let{{a,b},[n1,n2,n3],num,str}=
       {{a:1,b:2},[1,2,3],12,"str"}
    let{json,arr,num,str}=
       {{a:1,b:2},[1,2,3],12,"str"}
       
    console.log(a,b,c,n1,n2,n3,num,str)
    console.log(json,arr,num,str)
    
    //-----------------------------------------
    let {a,b}={12,13}
    console.log(a,b)報錯 因爲右邊不是個東西 非數組,非對象,非json
    //將值打印出來
    
  3. 數組

    數組新方法

    map                  映射        一個對一個
    [12,99,78]
    ["不及格","優秀","良好"]
    let score=[12,99,78]
    //返回一個新數組
    let result=score.map(item=>item>=60?"及格":"不及格")
    alert(result)
    //-------------------------------------------
    let arr=[12,5,6]
    let result=arr.map((item)=>{
        return item*2 //數值乘以2
    })
    alert(result)
    
    reduce               彙總        一堆出來一個
    [19,59,99]  算總分 平均分
    let arr=[19,59,99] 
    tmp 中間值
    item 數值
    index 下標
    總分
    let sum=arr.reduce((tmp,item,index)=>{
        return tmp+item
    )}
    alert(sum)
    平均分
    let average=arr.reduce(function(tmp,item,index){
        if(index!=arr.length-1){
        return tmp+item
        }else{
         return (tmp+item)/index
        }
    })
    alert(average)
    
    filter               過濾器            選擇過濾
    let arr=[19,59,99] 
    let result=arr.filter(item=>{
        //return true;//全部保留
        //return false //全部不保留
     /* 本身就是boolen值
             if(item>20){
                return true;
                }else{
                return false;
                }
    	*/ 
    	等價於
        return item>20
    })
    
    //------------------------------------------
         let objs=[
             {name:"楊樂樂",age:18},
             {name:"谷咕咕",age:22},
             {name:"阿姜",age:21},
             {name:"周某人",age:22},
         ]
        let result=objs.filter(json=>json.age=22)
        console.log(result)
         返回/*
            {name:"周某人",age:22},
            {name:"谷咕咕",age:22},
            */
    
    
    forEach              迭代          循環遍歷
    let arr=[1,2,3]
    let result=arr.forEach((item,index)=>{
        alert(item +index)
    })
    
  4. 字符串

    字符串操作

    (1)多了兩個新方法
    startsWith
    let str="http://baidu.com"
    if(str.startsWith("http://")){
        alert("普通網址")
    }   //是一個網址 返回值時boolen類型
    
    
    endsWith 進行郵箱的驗證,文件類型的擴展名都可以
    (2)字符串模板 不需要換行符,可以折行

    字符串拼接 反單引號

    let str=`abc`;
    let str2=`a${str}bc`
    alert(str2)//aabcbc
    
    
  5. 面向對象

  6. promise-承諾

    異步 同步
    操作之間沒關係,同時進行多個操作。回調地獄,一直使用ajax請求 同時能做一件事。一個再走下一個
    代碼複雜 代碼簡單

    promise==消除異步操作

    用同步的方式書寫異步代碼

    let p=new Promise(function(resolve,reject){
        /*	 resolve 成功推薦
       		 reject  失敗回調
        */
        $.ajax({
            url:'aaa.txt',
            dataType:'json',
            success:(arr)=>{
            resolve(arr);
        		},
             error:(err)=>{
            reject(err);
       		 }
        })
    })
    p.then(function(){
        alert("成功回調")
    },function(){
        alert("失敗回調")  
           });
    
    
    

    好處顯現

    let p=new Promise(function(resolve,reject){
        /*	 resolve 成功推薦
       		 reject  失敗回調
        */
        $.ajax({
            url:'aaa.txt',
            dataType:'json',
            success:(arr)=>{
            resolve(arr);
        		},
             error:(err)=>{
            reject(err);
       		 }
        })
    })
    let p1=new Promise(function(resolve,reject){
        /*	 resolve 成功推薦
       		 reject  失敗回調
        */
        $.ajax({
            url:'bbb.txt',
            dataType:'json',
            success:(arr)=>{
            resolve(arr);
        		},
             error:(err)=>{
            reject(err);
       		 }
        })
    })
    Promise.all([
        p,p1
    ]).then(function(arr){
        let [res1,res2]=arr;
        //arr數組作爲結果
        console.log(res1) //aaa.txt文件內容
         console.log(res2)//bbb.txt文件內容
        alert('全部成功了')
    },function(){
        alert('至少一個失敗了')
    })
    
    

    簡化操作 封裝promise

    function createPromise(url){
        return new Promise(function(resolve,reject){
          $.ajax({
            url:url,
            dataType:'json',
            success:(arr)=>{
            resolve(arr);
        		},
             error:(err)=>{
            reject(err);
       		 }
        })
        } )
    }
    Promise.all([
       createPromise('aaa.txt')
       createPromise('bbb.txt')
    ]).then(function(arr){
        let [res1,res2]=arr;
        //arr數組作爲結果
        console.log(res1) //aaa.txt文件內容
        console.log(res2)//bbb.txt文件內容
        alert('全部成功了')
    },function(){
        alert('至少一個失敗了')
    })
    
    

    更進一步 jquery的封裝promise

    let p=$.ajax({url:'aaa.txt',dataType:'json'})
    返回的是promise對象
    直接
    Promise.all([
      $.ajax({url:'aaa.txt',dataType:'json'})
      $.ajax({url:'bbb.txt',dataType:'json'})
    ]).then(function(arr){
        let [res1,res2]=arr;
        //arr數組作爲結果
        console.log(res1) //aaa.txt文件內容
        console.log(res2)//bbb.txt文件內容
        alert('全部成功了')
    },function(){
        alert('至少一個失敗了')
    })
    
    

    最簡單大致的寫法

    Promise.all([ajax1,ajax2]).then(success=>{},error=>())
    
    
    封裝爲一個promise方法
    console.log(111);
        let promise = new Promise((resolve, reject) => {
            setTimeout(function () {
                console.log(222);
                resolve("hello word")
            },3000)
        })
        
    promise.then((data)=>{
    		console.log(333);
    		console.log(data);
    }).catch(()=>{
    console.log(444);//錯誤進入
    })
    /*
    111
    222
    333
    hello word
    */
    
    

    Promise.race([]) 優先加載速度快的

  7. generator

  8. 模塊化

    在一個單獨的js文件中export拋出模塊

    export  function show(){
        console.log("模塊化執行show的方法")
    }
    
    export let show1=()=>{
        console.log("模塊化執行show1的方法")
    }
    
    
    import {show,show1} from './js/es6'
    show();
    show1();
    //分別執行控制檯打印的內容
    
    

    1、export
    一個模塊就是一個獨立的文件。該文件內部的所有變量,外部無法獲取。如果你希望外部能夠讀取模塊內部的某個變量,就必須使用export關鍵字輸出該變量。下面是一個 JS 文件,裏面使用export命令輸出變量。

    export寫法一般如下:

    var firstName = 'name';
    var lastName = 'last';
    var year = 1996;
    
    export { firstName, lastName, year };
    
    

    通常情況下,export輸出的變量就是本來的名字,但是可以使用as關鍵字重命名。例:

    function v1() { ... }
    function v2() { ... }
    
    export {
      v1 as streamV1,
      v2 as streamV2,
      v2 as streamLatestVersion
    };
    
    

    上面代碼使用as關鍵字,重命名了函數v1和v2的對外接口。重命名後,v2可以用不同的名字輸出兩次。

    2、import
    使用export命令定義了模塊的對外接口以後,其他 JS 文件就可以通過import命令加載這個模塊。例:

    import { firstName, lastName, year } from './profile.js';
    
    function setName(element) {
      element.textContent = firstName + ' ' + lastName;
    }
    
    

    當然,如果想爲輸入的變量重新取一個名字,import命令要使用as關鍵字,將輸入的變量重命名,這也是上文說通常情況下,export輸出的變量名不變的原因。例:

    import { lastName as surname } from './profile.js';
    
    

    另外,注意import命令具有提升效果,會提升到整個模塊的頭部,首先執行。

    3、export default
    從前面的例子可以看出,使用import命令的時候,用戶需要知道所要加載的變量名或函數名,否則無法加載。這就產生一個問題,使用模塊者不願閱讀文檔,不想知道變量名。此時就要用到export default命令,爲模塊指定默認輸出。

    person.js文件
    export default {
        firstName:'first',
        lastName:'last',
        age: 11
    }
    此時import導入寫成:
    
    import person from 'person'; 
    
    console.log(person.age)  //11
    
    

    本質上,export default就是輸出一個叫做default的變量或方法,然後系統允許你爲它取任意名字。

    4、總結拓展
    export default 向外暴露的成員,可以使用任意變量名來import
    在一個模塊中,export default 只允許向外暴露一次。
    在一個模塊中,可以同時使用export default 和export 向外暴露成員
    export可以向外暴露多個成員,同時,如果某些成員,在import導入時不需要,可以在import時不寫。
    使用export導出的成員,必須嚴格按照導出時候的名稱,來使用{ }按需接收

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章