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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    ABP拦截器之UnitOfWorkRegistrar(一)
    ABP中的拦截器之EntityHistoryInterceptor
    ABP中的拦截器之AuditingInterceptor
    ABP中的拦截器之ValidationInterceptor(下)
    ABP中的拦截器之ValidationInterceptor(上)
    ABP中模块初始化过程(二)
    ABP中的模块初始化过程(一)
    工欲善其事必先利其器
    ie9/8的iframe中jQuery报错
    git仓库删除所有提交历史记录
  • 原文地址:https://www.cnblogs.com/liujinyu/p/8492543.html
Copyright © 2011-2022 走看看