ES6新特性使用小结

Posted U.m.a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6新特性使用小结相关的知识,希望对你有一定的参考价值。

一、let const 命令

  

‘use strict‘;
/*function test(){
 //let a = 1;
    for(let i=1;i<3;i++){
        console.log(i)
    }
    console.log(i);     //引用错误

    let a = 1;
    let a= 2;       //报错  let 不能重复定义同一个变量
}
test();
*/
function last(){
    const PI = 3.1515926;
    //const  也具有块级作用域  const 声明变量时 *必须赋值
   // PI = 8;         报错 const声明的原始类型常量无法修改 PI is readOnly
   // console.log(PI);

    const K = {
        a:1
    };
    K.b=3;                          //const声明的引用类型可以随意修改  const指向指针
    K.a = 0;
    console.log(PI,K);
}
last();

 

二、解构赋值

  

{
    let a, b, reset;
    [a, b] = [1, 2];
    console.log(a, b);                    // a =1  b =2
}

{
    let a, b, reset;
    [a, b, ...reset] = [1, 2, 3, 4, 5, 6];
    console.log(a, b, reset);             //a = 1  b= 2  reset = [3,4,5,6]
}

{
    let a, b;
    ({a, b} = {a: 1, b: 2});
    console.log(a, b)                //1,2
}

{
    let a, b, c;
    [a, b, c = 3] = [1, 2];
    console.log(a, b, c);         //1,2,3

    [a, b, c] = [1, 2];
    console.log(a, b, c);         //1,2,  undefined
}

{
    let a = 1;                  //      使用场景    1 、变量交换
    let b = 2;
    [a,b]=[b,a];
    console.log(a,b);       // 2  1
}

{
    function f (){              //      使用场景   2、 接收函数返回的多个值
        return [1,2];
    }
    let a ,b;
    [a,b]=f();
    console.log(a,b);      //1 2
}

{
    function f(){
        return[1,2,3,4,5]
    }
    let  a,b,c;
    [a,,,b,c]=f();
    console.log(a,b,c)                      //1  4   5                       选择性接收
}
{
    function f(){
        return[1,2,3,4,5]
    }
    let  a,b,c;
 /*
   [a,...b]=f();
    console.log(a,b)                      //1  [2,3,4,5]                      选择性接收
 */
    [a,,...b]=f();
    console.log(a,b)                    //1  [3,4,5]                      选择性接收
}

{
    let o = {p:42,q:true};
    let {p,q} = o;
    console.log(p,q);       // 42 true
}

{
        let {a=10,b=5} = {a:3};
        console.log(a,b)  // 3 5
}

{
    let metaData = {
        title:‘abc‘,
        test:[{
            title:‘test‘,
            desc:‘description‘
        }]
    }
    let {title:esTitle,test:[{title:cnTitle}]} = metaData;

    console.log(esTitle,cnTitle);        // abc      test
}

 

三、RegExp扩展

{
    //  ES5 中创建 RegExp 对象的两种方式
    let regexp = new RegExp(‘xyz‘, ‘i‘);      // i 忽略大小写
    let regexp1 = new RegExp(/xyz/i);

    console.log(regexp.test(‘xyz123‘));         //true
    console.log(regexp1.test(‘xyz123‘));        //true


    //  ES6

    let regexp2 = new RegExp(/xyz/ig,‘i‘);       //ES6中可以接受两个参数 第二参数会覆盖修饰符
    console.log(regexp2.flags);     //  i           RegExp.flags 得到修饰符
}

{
    let s = ‘bb_bbb_bbbb‘;
    let a1 = /b+/g;
    let a2 = /b+/y;

    /*
    *  修饰符  g  y
    *       g修饰符会在匹配过程中碰到不匹配的字符就忽略
    *       y修饰符从开始检测在碰到不匹配的字符就停止       粘连模式
    * */

    console.log(‘one‘,a1.exec(s),a2.exec(s));       //[bb]  [bb]
    console.log(‘two‘,a1.exec(s),a2.exec(s));       //[bb]  null

        //RegExp.sticky 判断一个正则对象是否开启的粘连模式
    console.log(a1.sticky,a2.sticky);       //fasle true
}

{
    /*
    *   修饰符 u       通关unicode码来匹配   对大于两个字符的要用 u 来匹配
    * */

}

 

四、String扩展

{
    /*
     *   字符UNICODE表示法
     * */
    console.log(‘a‘, `\u0061`);          //a     a
    console.log(‘s‘, `\u20bb7`);         //s     ?7          当unicode码超过了 0xffff 时 会显示为两个字符
    //\u20bb    7
    console.log(‘s‘, `\u{20bb7}`);       //s     ??
}

{
    /*
     *   String API  codePointAt
     * */
    let s = ‘??‘;
    console.log(‘s‘, s.length);          //s     2
    console.log(‘0‘, s.charAt(0));       //0     ?
    console.log(‘1‘, s.charAt(1));       //1     ?
    console.log(‘0‘, s.charCodeAt(0));       //0     55362
    console.log(‘1‘, s.charCodeAt(1));       //1     57271

    let s1 = ‘??a‘;
    console.log(‘s1‘, s1.length);                          //s1    3
    console.log(‘code0‘, s1.codePointAt(0));               //134071
    console.log(‘code0‘, s1.codePointAt(0).toString(16));     //20bb7
    console.log(‘code1‘, s1.codePointAt(1)); //只取了 占两个字符的后两位
    console.log(‘code2‘, s1.codePointAt(2));
}

{
    console.log(String.fromCharCode(‘0x20bb7‘));        //?         ES5
    console.log(String.fromCodePoint(‘0x20bb7‘));       //??        ES6 对unicode超过最大值的处理
}

{
    let str = "\u{20bb7}abc";
    for (let i = 0; i < str.length; i++) {
        //console.log(‘es5‘,str[i]);
        //  前两个字符乱码 abc可以正常输出
    }

    for (let code of str) {
        console.log(‘es6‘, code);
        //??a b c               可以正常输出
    }
}

{
    /*
     *   判断字符串中是否包含某个字符 或者 以某个字符 起 始
     *       includes        startsWith          endsWith
     * */
    let str = ‘string‘;
    console.log(‘includes‘, str.includes(‘r‘));      //true
    console.log(‘includes‘, str.includes(‘c‘));      //false

    console.log(‘start‘, str.startsWith(‘str‘));     //true          判断是否以 str 开始
    console.log(‘start‘, str.endsWith(‘ng‘));     //true          判断是否以 ng 结束
}

{
    /*
     *   字符串复制拼接
     *       repeat
     * */
    let str = ‘abc‘;
    console.log(str.repeat(2));         //abcabc
    console.log(str.repeat(3));         //abcabcabc
}

{
    /*
     *   模版字符串拼接
     * */
    let name = ‘list‘;
    let info = ‘hello world‘;

    let m = `i am ${name},${info}`;
    console.log(m);                       //i am list,hello world
}
/*
 *   string API  padStart/padEnd(长度,填充字符)
 * */

{
    console.log(‘1‘.padStart(3, ‘0‘));        //001      向前补位
    console.log(‘1‘.padEnd(3, ‘0‘));      //100        向后补位
}
/*
 *   标签模版           1、 防止XSS  2、 多语言转换
 * */

{
    let user = {name: ‘list‘, info: ‘helloWorld‘};
    console.log(abc`i am ${user.name},${user.info}`);
    function abc(s, v1, v2) {
        // s:原生字符串    v1:变量1  v2:变量2
        console.log(s, v1, v2);
        return s + v1 + v2;
    }
}

/*
 *   string API  String.raw         对所有的\进行转义
 * */
{
    console.log(String.raw`Hi\n${2+3}`);        //  HI\n5       \n换行未生效
    console.log(`Hi\n${2+3}`);                  // HI
                                                //  5

}

 

五、Number扩展

 

{
  //  二进制和 八进制 表示法 console.log(0b11111);
//二进制数值都是以0b开头 console.log(0o11111); //八进制数组以0o开头 } /* * Number API Number.isFinite 判断一个数值是否有尽 * */ { console.log(‘25‘,Number.isFinite(25)); //25 true console.log(‘NaN‘,Number.isFinite(NaN)); //NnN false console.log(‘0‘,Number.isFinite(0)); //0 true console.log(‘1/0‘,Number.isFinite(‘true‘/0)); //分母为0 false //ES5 中判断是否为数值 console.log(‘Nan‘,Number.isNaN(NaN)); //true console.log(‘0‘,Number.isNaN(0)); //false } /* * Number API Number.isInteger 判断一个数值是否为整数 * */ { console.log(‘35‘,Number.isInteger(35)); //35 true console.log(‘35.0‘,Number.isInteger(35.0)); //35.0 true 小数部分为0 console.log(‘35.1‘,Number.isInteger(35.1)); //35.1 false console.log(‘35‘,Number.isInteger(‘35‘)); //35 false **接受参数必须为Number类型 console.log(‘hello‘,Number.isInteger(‘hello‘)); //hello false } /* * Number 新常量 MAX_SAFE_INTEGER/MIN_SAFE_INTEGER 9007199254740991/-9007199254740991 * 表示数值最大的上限和最小的下限 * API Number.isSafeInteger 判断一个数值是否在安全范围内 * */ { console.log(Number.MAX_SAFE_INTEGER); console.log(Number.MIN_SAFE_INTEGER); console.log(‘10‘,Number.isSafeInteger(10)); //10 true console.log(‘a‘,Number.isSafeInteger(false)); //a false **接受参数必须为Number类型 } /* * Math API Math.trunc 返回一个小数的整数部分 * */ { console.log(‘4.1‘,Math.trunc(4.1)); //4.1 4 console.log(‘4.9‘,Math.trunc(4.9)); //4.9 4 } /* * Math API Math.sign 判断一个数值 正数/负数/0 * */ { console.log(‘-8‘,Math.sign(-8)); //-8 -1 console.log(‘8‘,Math.sign(8)); //8 1 console.log(‘0‘,Math.sign(0)); //0 0 console.log(‘50‘,Math.sign(‘50‘)); //50 1 **可以被Number()转换的字符串也可以正常输出 console.log(‘f00‘,Math.sign(‘f00‘)); //f00 NaN } /* * Math API Math.cbrt 立方根的计算 三角函数方法 对数方法.... * */ { console.log(‘-1‘,Math.cbrt(-1)); //-1 -1 console.log(‘8‘,Math.cbrt(8)); //8 2 }

 

以上是关于ES6新特性使用小结的主要内容,如果未能解决你的问题,请参考以下文章

ES6新特性使用小结

es6实用特性小结

ES6的新特性

react入门系列之todolist代码优化(使用react 新特性,es6语法)

ES6中的一些新特性

ES6新特性