zoukankan      html  css  js  c++  java
  • es6 | 新增语法 | 总结

    电梯 原文 https://www.jianshu.com/p/5f40c43c6f85

    重点:

    6 遍历map结构

    正则扩展

    at相当于charAt() ,可以识别中文
    normarize()
    includes() , startsWith() , endsWith()
    repeat(n) //n为重复次数
    padStart, padEnd 字符串补全

    ========

    Math

    Math.trunc(4.1) //去除小数部分 等同:向下取整
    Math.sign() //判断正负数/0
    Math.cbrt() //立方根
    Math.fround() //返回数值的单精度浮点数形式

    ========

    1 对象转数组

    //es5 对象转数组: 
     var arr1 = [].slice.call(arrayLike);
    //es6 对象转数组,适用于数组对象和可遍历对象Map,Set
     let arr2 = Array.from(arrayLike);

    2 Array.of(值1,值2,值3) 将一组值转换为数组
    3 copyWithin(target,start,end)

    4 find(回调函数)返回原值 、findIndex(回调函数) 返回索引

    5 fill( ) 全部填充 覆盖

    6 entries(),keys()和values()——用于遍历数组
    7
    includes() 数组是否包含给定的值

    解构

    解构赋值的规则是,只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

    解构函数的用途

    1 交换变量值

    [x,y] = [y,x]
    

    2 从函数返回多个值

    var {foo,bar} = example( );
    

    3 函数参数的定义
    4 提取Json数据

    var jsonData = { id: 42, status: "OK", data: [867, 5309]};
    let { id, status, data: number } = jsonData;
    console.log(id, status, number);// 42, "OK", [867, 5309]
    

    5 函数参数的默认值
    6 遍历map结构

    var map = new Map( );
    map.set('first','hello');
    map.set('second','hello');
    map.set('third','hello');
    map.set('fourth','hello');
    for(let[key,value] of map){
         //获取到键值对
    }
    for(let [key] of map){
        //获得键名
    }
    for(let [,value] of map){
        //获得键值
    }
    

    7 输入模块的指定方法

    const { SourceMapConsumer, SourceNode } = require("source-map");
    

    正则扩展

    at相当于charAt() ,可以识别中文
    normarize()
    includes() , startsWith() , endsWith()
    repeat(n) //n为重复次数
    padStart, padEnd 字符串补全

    数值扩展

     
    屏幕快照 2016-10-05 08.02.35.png

    二进制 0b, 八进制0o
    Number.isInteger(25.0) // true
    Number.EPSILON

    function withinErrorMargin (left, right) { 
      return Math.abs(left - right) < Number.EPSILON;
    }
    withinErrorMargin(0.1 + 0.2, 0.3)
    // true
    withinErrorMargin(0.2 + 0.2, 0.3)
    // false
    

    Math.trunc(4.1) //去除小数部分
    Math.sign() //判断正负数/0
    Math.cbrt() //立方根
    Math.fround() //返回数值的单精度浮点数形式
    ...
    还有一些关于对数方法,三角函数方法
    指数运算符: a**=2; // a= a * a;

    数组扩展

     
    屏幕快照 2016-10-05 08.26.50.png

    1 对象转数组

    //es5 对象转数组: 
     var arr1 = [].slice.call(arrayLike);
    //es6 对象转数组,适用于数组对象和可遍历对象Map,Set
     let arr2 = Array.from(arrayLike);
    

    2 Array.of(值1,值2,值3) 将一组值转换为数组
    等价于es5
    var arr1 = [].slice.call(arguments);
    3 copyWithin(target,start,end)
    target(必需):从该位置开始替换数据。
    start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。
    end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

    [1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5]
    

    4 find(回调函数)

    //返回符合条件的值
    [1, 4, -5, 10].find((n) => n < 0) // -5
    

    findIndex

    //返回符合条件的第一个索引
    [1, 5, 10, 15].findIndex(function(value, index, arr) { 
       return value > 9;
    })
     // 2
    

    5 fill( ) 使用给定值填充一个数组
    6 entries(),keys()和values()——用于遍历数组
    7 includes() 数组是否包含给定的值

    函数扩展

     
    屏幕快照 2016-10-05 08.52.52.png

    1 函数参数设置了默认值,length失效
    2 rest参数 ...变量名 用于获取函数多余的参数
    3 ...替换apply

    // ES5的写法
    function f(x, y, z) {  
      // ...
    }
    var args = [0, 1, 2];
    f.apply(null, args);
    // ES6的写法
    function f(x, y, z) {  
      // ...
    }
    var args = [0, 1, 2];
    f(...args);
    //字符串转数组
    [...'hello']    // ["h","e","l","l","o"]
    

    4 函数的name属性
    5 箭头函数
    箭头函数有几个使用注意点。
    (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
    (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
    (4)不可以使用yield命令,因此箭头函数不能用作Generator函数。
    上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
    6 函数绑定
    obj::bind() 方法绑定在对象上
    7 尾调用

    function outter(x){
      return inner(x);
    }
    

    8 尾递归

    对象扩展

     
    屏幕快照 2016-10-05 09.32.21.png

    Object.is
    就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
    +0 === -0 //true
    NaN === NaN // false
    Object.is(+0, -0) // false
    Object.is(NaN, NaN) // true
    

    Object.assign
    方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
    浅拷贝

    ES6一共有5种方法可以遍历对象的属性。

    (1)for...in
    for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。
    (2)Object.keys(obj)
    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。
    (3)Object.getOwnPropertyNames(obj)
    Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)。
    (4)Object.getOwnPropertySymbols(obj)
    Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性。
    (5)Reflect.ownKeys(obj)
    Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举。
    以上的5种方法遍历对象的属性,都遵守同样的属性遍历的次序规则。
    首先遍历所有属性名为数值的属性,按照数字排序。
    其次遍历所有属性名为字符串的属性,按照生成时间排序。
    最后遍历所有属性名为Symbol值的属性,按照生成时间排序。

    Symbol

    Proxy和Reflect

    Set和Map

    Iterator和 for...of

    Generator函数

    function* generator(){
      yield 1;
      yield 2;  
      yield 3;
      return 4;
    }
    generator.next() // { value: 1, done: false }
    generator.next()// { value: 2, done: false }
    generator.next()// { value: 3, done: false }
    generator.next()// { value: 4, done: true }
    

    Promise对象

    一个用Promise对象实现的Ajax操作的例子。

    var getJSON = function(url) { 
      var promise = new Promise(function(resolve, reject){ 
        var client = new XMLHttpRequest(); 
        client.open("GET", url); 
        client.onreadystatechange = handler;      
        client.responseType = "json";       
        client.setRequestHeader("Accept", "application/json");     
        client.send(); 
        function handler() { 
          if (this.readyState !== 4) { 
            return; 
          } 
          if (this.status === 200) { 
            resolve(this.response); 
          } else { 
            reject(new Error(this.statusText)); 
          } }; });   
        return promise
    ;};
    getJSON("/posts.json")
      .then(function(json) { 
          console.log('Contents: ' + json);
       }, function(error) { 
          console.error('出错了', error);
       });
    

    getJSON是对XMLHttpRequest对象的封装,用于发出一个针对JSON数据的HTTP请求,并且返回一个Promise对象。需要注意的是,在getJSON内部,resolve函数和reject函数调用时,都带有参数。

    异步操作和Async

    Class

    Decorator 装饰器



    作者:Bookish倩宝
    链接:https://www.jianshu.com/p/5f40c43c6f85
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    ArrayList removeRange方法分析
    LinkedHashMap源码分析(基于JDK1.6)
    LinkedList原码分析(基于JDK1.6)
    TreeMap源码分析——深入分析(基于JDK1.6)
    51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
    51 NOD 1049 最大子段和 动态规划 模板 板子 DP
    51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
    8月20日 训练日记
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/liujinyu/p/8492543.html
Copyright © 2011-2022 走看看