美文网首页Web前端之路让前端飞程序员
ECMAScript6 实用笔记(更新中...)

ECMAScript6 实用笔记(更新中...)

作者: 记忆的时间差 | 来源:发表于2017-11-06 14:57 被阅读110次

    1、ECMAScript6 实用笔记(更新中...)


    一、简介

    1、目前常用的版本是ECMAScript3.0,后来改了名字叫ECMAScript5

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
    ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现

    2、ECMAScript6的特点:

    • ES6增添了许多必要的特性,例如模块和类,块级作用域,常量与变量

    3、浏览器的支持程度

    4、可以通过Babel转码器把ES6写的代码转成ES5的,就不用担心运行环境是否支持
    5、chrome下使用ES6为保证可以正常使用大部分语法,需要使用严格模式,即在js开始部分加上'use strict'
    6、在firefox下使用ES6为保证可以正常使用大部分语法,需要知道测试版本,即在script标签的type属性中加上“application/javascript;version=1.7”属性值

    二、let

    let 声明变量的关键字
    1、在相同的作用域内,let不能重复声明一个变量(不同的作用域内除外)
    2、let声明的变量不会被预解析
    3、暂时性死区

    'use strict'        //严格模式,即在js开始部分加上'use strict'
    console.log(a);     //undefined let声明的变量不会被预解析
    var a=12;
    var a='kaivon';
    console.log(a);
    
    //console.log(b);       //报错    不能提前使用
    let b=20;
    //let b=30;         //报错 let不能重复声明一个变量(不同的作用域内除外)
    console.log(b);
    
    {
        let str='kaivon';
        console.log(str);
    }
    

    三、块级作用域

    块级作用域批是的是一对大括号就是一个作用域
    块级作用域可以直接写一对大括号,以后就不用写自执行函数了

    {
        let a=12;
        function fn(){
            let a=20;
            console.log(a);
        }
        fn();
    }
    

    四、const 常量

    const 声明一个常量,一旦声明后就不能修改了
    1、如果声明后再去修改的话就会报错
    2、只声明不赋值也会报错
    3、只能先声明后使用,不会被提前解析
    4、不能重复声明一个常量
    注意:const声明的对象中的属性是可以修改的

    'use strict'
                
    var a=12;
    a='kaivon';
    console.log(a);
    
    const str='kaivon';
    //str=12;       //报错  声明后再去修改的话就会报错
    
    console.log(str);
    
    //const b;          //报错    只声明不赋值也会报错
    
    //console.log(c);   //报错    只能先声明后使用,不会被提前解析
    const c=20;
    //const c='kaivon'; //报错    不能重复声明一个常量
    
    //声明一个对象后,可以对它里面的属性进行修改
    const obj={
        name:'kaivon'   
    };
    
    obj.name='陈学辉';
    console.log(obj); //const声明的对象中的属性是可以修改的
    

    五、数组解构赋值

    解构赋值:

    按照一定的模式,从数组或者对象中把数据拿出来,对变量进行赋值

    数组解构赋值:

    等号左边与右边必需都是数组,数组的解构赋值要一一对应。如果对应不上的话就是undefined

    'use strict'
    /*var a=1;  //传统声明变量
    var b=2;*/
    
    var [a,b,c]=[1,2,3];  //可以使用数组进行批量声明变量
    console.log(a,b,c);     //1 2 3
    
    let [x,,y,z]=[1,2,3];   //数组的解构赋值要一一对应。如果对应不上的话就是undefined
    console.log(x,y,z);     //1 3 undefined 
    
     var [a,[b,c]]=[1,[2,3]];
     console.log(a,b,c);        //1 2 3  可以嵌套
    
     //可以用来调换两个值
     var n1=10;
     var n2=15;
    
     var [n1,n2]=[n2,n1];
     console.log(n1,n2);        //15 10
    
    
     //也可以用来取函数的返回值
     function fn(){
        return ['red','green','blue'];
     }
     var [d,e,f]=fn();
    
     console.log(e);        //green
    

    六、对象解构赋值

    解构赋值:

    按照一定的模式,从数组或者对象中把数据拿出来,对变量进行赋值

    对象解构赋值:

    等号左边与右边必需都是对象,名字要一一对应,顺序不需要对应,对应不上的值结果是undefined

    'use strict'
                
    var obj={
        name:'kaivon',
        QQ:356985332,
        language:['css','html','js'],
        work:function(){
            console.log('js');
        }
    };
    
    var {name,work,QQ,age}=obj; //等号左边与右边必需都是对象,名字要一一对应
    console.log(name,work,QQ,age);//kaivon 356985332 js undefined
    
    
    //可以用它来取一个对象的值
    function fn(){
        return {
            c1:'red',
            c2:'green',
            c3:'blue'
        }
    }
    
    var {c1,c2,c3}=fn();
    
    console.log(c2);        //green
    
    

    七、字符串的扩展方法

    • includes(s) 字符串里面是否包含某个字符,参数是一个字符
    • startsWidth(s) 字符串的开始位置的字符是否是参数的,参数是一个字符
    • endsWidth(s) 字符串的结束位置的字符是否是参数的,参数是一个字符
      以上的几个方法都返回一个布尔值,包含有true,不包括为false
    • repeat(num) 复制字符串,参数为数字,表示复制的次数。参数必需是一个正数,其它的就会报错
    'use strict'
    var str='kaivon';   //声明个字符串
    console.log(str.includes('i'));         //true 字符串里面包含 'i'
    console.log(str.includes('b'));         //false 字符串里面不包含 'b'
    console.log(str.startsWith('k'));       //true  开始位置包含'k'
    console.log(str.endsWith('n'));         //true  结束位置包含'n'
    
    console.log(str.repeat(3));             //kaivonkaivonkaivon 复制三次
    //console.log(str.repeat(-1));              //报错 参数必需是一个正数,其它的就会报错
    //console.log(str.repeat(Infinity));        //报错 参数必需是一个正数,其它的就会报错
    
    

    八、模板字符串

    模板字符串:字符串及数据的拼接方式

    1、字符串需要用一对反引号包起来,它可以定义多行字符串,只用一对反引号
    2、要拼进去的数据需要放在${}里面
    3、大括号里还可以进行运算
    4、大括号里还可以调用函数

    var obj={
        title:‘心情‘,
        content:’今天很爽,吃了饭,睡了觉,还打了豆豆‘
    }
    var text=document.getElementById("text");
    //text.innerHTML='<h1>'+obj.title+'</h1><p>'+obj.content+'</p>'; //常规的拼接方法
    
    function fn(){
        return '那么问题来了,豆豆爽么?';
    }
    
    //要拼进去的数据需要放在${}里面
    var str1=`<h1>${obj.title}</h1>  
                <p>${obj.content}</p>`;
                
    //大括号里还可以进行运算
    var str2=`<h1>${obj.title+'+1'}</h1>    
                <p>${obj.content}</p>`;
    
    var str3=`<h1>${obj.title+'+1'}</h1>
                <p>${obj.content+fn()}</p>`;    //大括号里还可以调用函数
                
    //text.innerHTML=str1;
    //text.innerHTML=str2;
    //text.innerHTML=str3;
    

    九、Math对象的扩展方法

    Math.trunc(num): 去除小数部分,是直接把小数部分去掉

    1、对于非数值,先调用Number方法把它转成数字
    2、对于空值和无法转成数字的值,结果是NaN

    console.log(Math.trunc(12.74));         //12
    console.log(Math.trunc(0.5));           //0
    console.log(Math.trunc('36.01'));       //36
    console.log(Math.trunc('kaivon'));      //NaN
    

    Math.sign(num): 判断一个数是正数还是负数还是0

    1、参数为正数,返回1
    2、参数为负数,返回-1
    3、参数为0,返回0
    4、参数为-0,返回-0
    5、参数为其它值,返回NaN

    console.log(Math.sign(5));              //1
    console.log(Math.sign(-5));             //-1
    console.log(Math.sign(0));              //0
    console.log(Math.sign(-0));             //-0
    console.log(Math.sign('kaivon'));       //NaN
    
    

    十、数组的扩展方法

    Array.from() 把类数组转成真正的数组

    任何有length属性的对象都可以用这个方法转真正数组

    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    
    'use strict'
    var lis=document.querySelectorAll("li");
    //console.log(lis);
    var newLis=[].slice.call(lis); //利用以前的方法将类数组转换为数组
    
    var newLis=Array.from(lis);     //Array.from() 把类数组转成真正的数组
    console.log(newLis);            //[li, li, li, li, li]
    
    var str='kaivon';
    var newStr=Array.from(str);     //任何有length属性的对象都可以用这个方法转真正数组
    console.log(newStr);            //["k", "a", "i", "v", "o", "n"]
    
    //对象身上只要有length属性就可以调用Array.from()把对象转成数组,对象中的key必需是从0开始的数字才能转
    
    var obj={
        0:'red',
        1:'green',
        2:'blue',
        3:'yellow',
        length:4
    };
    console.log(Array.from(obj)); // ['red','green','blue','yellow']        
    

    Array.of() 把一组数值转成真正的数组

    console.log(new Array());       //[]
    console.log(new Array(3));      //[, , ,]
    console.log(new Array(1,2,3));  //[1, 2, 3]
    
    console.log(Array.of(1));       //[1]
    console.log(Array.of(1,2,3));   //[1, 2, 3]
    
    

    includes(数据,起始位置) 查找数组中有没有某个数据

    var arr=['red','green','blue','yellow'];
    console.log(arr.includes('red'));       //true
    console.log(arr.includes('pink'));      //false
    console.log(arr.includes('green',2));   //false
    
    

    遍历相关

    • for in 循环,能够直接读取键名
    • for of 循环,能够直接读取键值
    •          它不光可以遍历数组或者对象,只要有遍历接口的对象都可以用它
      
    • keys() 存储了数组的所有键名
    • values() 存储了数组的所有键值
    • entries() 存储了数组的所有键值对
    'use strict'
    var color=['red','green','blue','yellow'];
    
    //for in
    for(var attr in color){
        console.log(attr);  //0 1 2 3 直接读取键名
    }
    
    //for of
    for(var value of color){
        console.log(value); //red green blue yellow 直接读取键值
    }
    
    //字符串也可以使用for of
    var str='kaivon';
    for(var value of str){
        console.log(value);     //k a i v o n 只要有遍历接口的对象都可以用它
    }
    
    
    //遍历keys
    for(var key of color.keys()){
        console.log(key);       //0 1 2 3 存储了数组的所有键名
    }
    
    //遍历values
    /*for(var value of color.values()){  存储了数组的所有键值
        console.log(value);     //red green blue yellow 提示一下,chrom还不支持
    }*/
    
    //遍历entries
    for(let [key,value] of color.entries()){
        console.log(key,value); //0 "red"    1 "green"  2 "blue"        3 "yellow"  存储了数组的所有键值对
    }
    

    十一、函数参数默认值

    'use strict'
    function fn(a,b){
        b=b||'kaivon';  //以往设置默认参数方法
        console.log(a,b);
    }
    fn('hello');        //hello kaivon
    fn('hello','moto'); //hello moto
    
    //参数变量是默认声明的,不能用let或者const再次声明
    function fn2(a=20,b=10){    //直接将默认参数写在函数括号中
        //console.log(a,b);     //20 10
        //let a=12;             //报错
        console.log(a+b);       //30
    }
    fn2();          //30
    fn2(23,45);     //68
    
    

    十二、箭头函数

    语法:
    1、function用var、let、const来表示
    2、参数要写在第一个等号后面

    • 1、如果没有参数,需要写一对空的小括号
    • 2、只有一个参数,那就直接写,不用加括号
    • 3、参数有多个,需要加一个小括号,参数用逗号隔开
    'use strict'
    /*function fn1(){
        console.log('kaivon');
    }
    fn1();*/ //常规写法
    
    var fn1=()=>console.log('kaivon');  //es5写法 如果没有参数,需要写一对空的小括号
    fn1();
    
    
    let fn2=a=>console.log(a);  //只有一个参数,那就直接写,不用加括号
    fn2('kaivon');          //kaivon
    
    const fn3=(a,b)=>{      //参数有多个,需要加一个小括号,参数用逗号隔开
        let result=a+b;
        console.log(result);
    }
    fn3(1,2);       //3
                
    

    十三、对象的简洁表示法

    属性与方法都可以简洁表示

    'use strict'
    /*function fn(){
        var x=10;
        var y=20;
        function sum(){
            return x+y;
        }
        
        return {x:x,y:y,sum:sum}
    }
    console.log(fn());*/        //常规获取函数内部变量及方法
    
    
    function fn(){              //ES6获取函数内部变量及方法
        var x=10;
        var y=20;
        function sum(){
            return x+y;
        }
        
        return {
            x,
            y,
            sum(){
                return x+y;
            }
        }
    }
    console.log(fn());
    console.log(fn().sum())         //30
    

    十四、属性名表达式

    可以把表达式放在中括号里作为属性名

    'use strict'
    
    let key='interest';
    
    let obj={
        name:'kaivon',
        [key]:'打豆豆',
        ['show'](){
            console.log(this.name);
        }
    }
    console.log(obj);
    
    

    十五、Object.is()

    比较两个值是否相等,与===的结果一样,但是还是有一些区别

    • 返回的结果是一个布尔值
      区别:
    • 1、+0与-0比较的结果为false
    • 2、NaN与NaN比较的结果为true
    'use strict'
    console.log(Object.is('kaivon','kaivon'));      //true
    
    console.log(+0===-0);           //true
    console.log(Object.is(+0,-0));  //false
    
    console.log(NaN===NaN);         //false
    console.log(Object.is(NaN,NaN));    //true
    

    十六、Object.is()

    将一个对象身上的属性复制到另一个对象身上

    • 至少需要两个参数
    • 1、第一个参数为合并后的对象
    • 2、从第二个参数开始往后就是所有要合并的对象
    • 3、如果有同名的属性,后面会把前面覆盖了
    • 4、如果有嵌套的对象,是覆盖并不是添加
    'use strict'
    var obj1={a:1};
    var obj2={b:2};
    var obj3={a:4,c:3};
    
    Object.assign(obj1,obj2,obj3);
    console.log(obj1); //{a:1,b:2,c:3}  //如果有同名的属性,后面会把前面覆盖了
    
    //封装个函数
    const merge=(target,...souce)=>{
        Object.assign(target,...souce);
        return target;
    }
    console.log(merge(obj1,obj2,obj3));     //Object {a: 4, b: 2, c: 3}
    
    //如果有嵌套的对象,是覆盖并不是添加
    var obj4={
        d:{
            e:5
        }
    }
    var obj5={
        d:{
            f:6
        }
    }
    
    console.log(merge({},obj4,obj5)); //{a: 4, b: 2, c: 3}
    

    十七、Set数据结构

    Set 数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数

    • size 数据的长度
    • add() 添加一个数据
    • deleate() 删除一个数据
    • has() 查找某条数据,返回一个布尔值
    • clear() 删除所有数据
    'use strict'
    var set=new Set([1,3,4,5,4,3,2]);
    set.add(6);     //在数据结构中添加 6 
    set.delete(1);  //在数据结构中删除 1
    console.log(set.has(5));    //true 在数据结构中查找是否有 5
    set.clear();    //删除所有数据内容
    console.log(set,set.size);          //Set {1, 3, 4, 5, 2} 5
    

    相关文章

      网友评论

        本文标题:ECMAScript6 实用笔记(更新中...)

        本文链接:https://www.haomeiwen.com/subject/wyslmxtx.html