8.4笔记

ES6

  1. ...扩展运算符,可直接将数组转函数参数,无需使用apply;
    与解构赋值结合使用;
    将字符串转数组;
    只要有Iterator接口的都可以使用(调用遍历器接口);
  2. Array.from():用于将对象(类似数组(即必须有length属性)和可遍历的对象,包括es6新增的数据结构Set和Map;只要部署了Iterator接口的数据结构都可转,像字符串)转数组
    可接受第二个参数,作用类似数组的map方法
    Array.from(arrayLike, x => x * x);
    // 等同于
    Array.from(arrayLike).map(x => x * x);
    
    Array.from([1, 2, 3], (x) => x * x)
    // [1, 4, 9]
    
  3. 数组方法汇总:https://blog.csdn.net/weixin_40693643/article/details/104424800
  4. ES6允许在大括号里直接写入变量和函数,作为对象的属性和方法
  5. ES6新增Object.assign(),忽略enumerablefalse的属性,只拷贝对象自身的可枚举的属性;
    注意: 它是浅拷贝;它对于嵌套对象的处理方式是替换而不是添加;
  6. ES6新增了关键字super,指向当前对象的原型对象
  7. ES2020引入了链判断运算符?.
    直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不再往下运算,而是返回undefined
  8. ES2020引入了Null判断运算符??,它的行为类似||,但是只有运算符左侧的值为null或undefined时,才会返回右侧的值
  9. Object.is() 比较两个值是否严格相等
    +0 === -0 //true
    NaN === NaN // false
    
    Object.is(+0, -0) // false
    Object.is(NaN, NaN) // true
    
  10. ES2017引入了Object.getOwnPropertyDescriptors()方法,返回指定对象所有自身属性(非继承属性)的描述对象
  11. ES5引入了Object.keys方法,返回一个数组,参数是对象自身( 不含继承)的所有可遍历属性的键名;
    ES7引入了跟Object.keys配套的Object.valuesObject.entries,作为遍历一个对象的补充手段,供for ... of循环使用;
    Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象(特别适合将Map结构转为对象)
    配合URLSearchParams对象,将查询字符串转为对象
  12. ES6引入了一种原始数据类型Symbol,表示独一无二的值。ES6标准入门 第3版 读书笔记之Symbol
  13. ES6提供了数据结构Set(类似于数组,成员的值是唯一的);
    ES6提供了数据结构Map,类似于对象,也是键值对的集合,其中,各种类型的值都可以当作键;ES6标准入门 第3版 读书笔记之Set和Map 数据结构
  14. ES6原生提供了Proxy构造函数,用来生成Proxy实例
    var proxy = new Proxy(target, handler);
    new Proxy()表示生成一个Proxy实例
    target参数:要拦截的目标对象
    handler参数:用来定制拦截行为
  15. Reflect ES6为了操作对象而提供的新API
    • Object对象的一些明显属于语言内部的方法(如Object.defineProperty),放到Reflect对象上;
    • 修改某些Object方法的返回结果,让其变得更合理;
    • Object操作都变成函数行为;某些object操作是命令式的;
    // 老写法
    'assign' in Object // true
    
    // 新写法
    Reflect.has(Object, 'assign') // true
    
    • Reflect对象的方法与Proxy对象的方法一一对应
  16. ES6将Promise写入了语言标准;ES6——Promise对象总结
  17. Iterator遍历器,作用:
    • 为各种数据结构提供统一,简便的访问接口
    • 使得数据结构的成员能够按某种次序排列
    • ES6创造了一种新的遍历命令for ... of 循环,Iterator接口主要供for .. of使用;
      for ... of循环可以自动遍历Generator函数运行时生成的Iterator对象,不需要调用next方法
  18. ES6提供了一种异步编程的解决方案Generator
    示例代码:
    function* helloWorldGenerator() {
          
          
      yield 'hello';   // 遇到yield,暂停后面的操作,将yield后面表达式的值作为返回的对象的value属性值
      yield 'world';
      return 'ending';
    }
    var hw = helloWorldGenerator();
    // 调用方法
    hw.next()
    // { value: 'hello', done: false }
    hw.next()
    // { value: 'world', done: false }
    hw.next()
    // { value: 'ending', done: true }
    hw.next()
    // { value: undefined, done: true }
    
    Generator函数内部可以部署错误处理代码,捕获函数体外抛出的错误
    function* gen(x){
          
          
      try {
          
          
        var y = yield x + 2;
      } catch (e){
          
          
        console.log(e);
      }
      return y;
    }
    
    var g = gen(1);
    g.next();
    g.throw('出错了');
    // 出错了
    
    Thunk函数是自动执行Generator函数的一种方法;任何函数,只要参数有回调函数,就能写成Thunk函数的形式;
    Thunk函数可以用于Generator函数的自动流程管理
  19. co模块也是用于Generator函数的自动执行;它可以让你不用编写Generator函数的执行器;
    var gen = function* () {
          
          
      var f1 = yield readFile('/etc/fstab');
      var f2 = yield readFile('/etc/shells');
      console.log(f1.toString());
      console.log(f2.toString());
    };
    var co = require('co');
    co(gen);
    
    co(gen).then(function (){
          
          
      console.log('Generator 函数执行完成');
    });
    
  20. ES2017引入了async函数(Generator函数的语法糖),使得异步操作变得更加方便;
    Generator函数的星号*替换为async,将yield替换为await;
    • 内置执行器,不像Generator函数,需要调用next方法,或者使用co模块;
    • 返回值是Promise对象
  21. ES6引入了Class类这个概念
    注意:类和模块内部,默认严格模式;类不存在变量提升;name属性总是返回紧跟在class关键字后面的类名;如果在某方法前加上星号*,就表示该方法是一个Generator函数;类内部的this默认指向类的实例;
  22. ES6为new命令引入了一个new.target属性。该属性一般用于构造函数中,返回new命令作用于哪个构造函数。如果构造函数不是通过new命令或Reflect.construct()调用的,new.target就会返回undefined;
  23. Class的继承:
    • Class可以通过extends关键字实现继承;
    • Object.getPrototypeOf方法可以用来从子类上获取父类(可以判断一个类是否继承另一个类)
    • super关键字:作为函数调用时,代表父类的构造函数(ES6要求子类的构造函数必须执行一次super函数);作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类;

猜你喜欢

转载自blog.csdn.net/weixin_40693643/article/details/107780461
8.4
今日推荐