https://es6.ruanyifeng.com/
    https://www.jianshu.com/p/99c15f9bff27
    简单理解,具体看链接
    1、let const
    声明变量,块级作用域,let在for外会失效。const声明的变量保存的地址不能被修改,但地址指向的值可以修改;
    2、解构赋值
    可以把变量用[]或{}括起来赋值,按照相应的位置对变量赋值;解构失败变量=undefined;允许使用默认赋值;
    3、字符串增强
    模板字符串,使用代替'';可以在中使用变量(js语句)和换行;
    例: let str = 生成一个随机数:${ Math.random() };
    4、字符串扩展方法:include、startWith、endsWith
    5、函数扩展,传参可以使用默认值
    6、Symbol数据类型,独一无二。
    七种数据类型:undefined、null、boolean、string、number、object、symbol
    7、Set和Map,Set类似数组,但成员是唯一的,小技巧用于数组去重,但{}和{}不灵;
    Map,可以使用任何数据类型作为对象的key;之前object的key只能是string
    8、Proxy:代理、拦截器,可以修改默认操作的行为。用法:var proxy = new Proxy(target, handler);target表示拦截对象,handler表示拦截操作的对象,包括get、set、has、consruct等13种;与Object.definedproperty类似但definedProperty只能改写set、get。vue3开始使用proxy实现双向数据绑定。
    9、reflect:封装了操作object的方法,完全支持proxy,proxy有的reflect都有;例: Reflect.has(Object, ‘a’);
    10、Promise,承诺;异步的解决方案,有reslove、reject、pending三种状态;详见其他链接;
    11、Interator,遍历器,为可遍历的‘集合‘提供一种接口,主要为for of服务;
    12、for of;一个数据结构只要部署了Symbol.iterator属性就可以使用for of循环遍历;
    13、generator函数,和内部的yield 和函数上的.next()配合,可以一步一步的执行函数,返回一个对象 value 和 done;next中可以传值,作为执行下一步的参数,如果不传默认使用上一步的value;还可以.throw和.return
    14、async是Generator的语法糖,
    换成async,yield换成await
    15、class,类,更接近传统面向对象语言的写法。类似构造函数,生成实例,继承原型链等,默认包含一个constructor属性表示构造器;可以使用extents继承;面向对象封装、多态、继承;
    16、Module;模块化,可以取代服务端的CommonJS和浏览器端的AWD;使用export导出,使用import引入;
    与CommonJS的区别,CommonJS用在node上,导出使用module.export 引入使用require,不在package中写明type的话.cjs表示Com~;.mjs表示es6的module用法;