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
}
时间: 2024-08-30 07:50:24

ES6新特性使用小结(一)的相关文章

ES6新特性使用小结(三)

九.数据类型 Symbol /* * Symbol 数据类型 概念: Symbol 提供一个独一无二的值 * */ { let a1 = Symbol(); let a2 = Symbol(); console.log(a1===a2,a1,a2); //false let a3 = Symbol.for('a3'); //*Symbol.for 会检查window下是否存在 'a3' let a4 = Symbol.for('a3'); console.log(a3===a4); //true

ES6新特性

ES6新特性概览 箭头操作符 如果你会C#或者Java,你肯定知道lambda表达式,ES6中新增的箭头操作符=>便有异曲同工之妙.它简化了函数的书写.操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs. 我们知道在JS中回调是经常的事,而一般回调又以匿名函数的形式出现,每次都需要写一个function,甚是繁琐.当引入箭头操作符后可以方便地写回调了.请看下面的例子. var array = [1, 2, 3]; //传统写法 array.forEach(f

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>

ES6新特性:Proxy代理器

ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome>39或者firefox>18: Proxy的基本使用: Proxy如其名, 它的作用是在对象和和对象的属性值之间设置一个代理,获取该对象的值或者设置该对象的值, 以及实例化等等多种操作, 都会被拦截住, 经过这一层我们可以统一处理,我们可以认为它就是“代理器” ; Proxy是一个构造函数, 使

ES6新特性学习

ES6是ECMAScript 6的缩写简称,2015 年 6 月,ECMAScript 6 正式通过,成为国际标准.ES6带来的新功能涵盖面很广,还有很多很便利的功能.下面来记一下我接触到的几个新特性. 1.模板字符串,用反单引号包起来,可以实现字符串回车换行,也可以在字符串里拼接变量,${变量},很方便使用. var name="fanfan"; var age="20"; console.log("Hello,My name is "+nam

你不知道的JavaScript--Item24 ES6新特性概览

ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中.要查看ES6的支持情况请点此. 目前想要

JS篇 ES6新特性

注意: 1. Node环境下,--harmony参数启用ES6新特性,许多新特性只有在strict mode下才生效,因此使用"use strict"或者--use_strict,否则harmony没有被启用: 1. 块级作用域(Block scope) // Block scope function f1(){ console.log("Outside."); } (function(){ if(false){ // f1定义在if {}之内 function f

ES6新特性之模板字符串

ES6新特性概览  http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串   http://www.infoq.com/cn/articles/es6-in-depth-template-string

ES6新特性概览

转自:http://www.cnblogs.com/Wayou/p/es6_new_features.html ES6学习可参考:http://es6.ruanyifeng.com/ 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6