ES6 是一种 JS 的规范化, JS 是 ES 的拓展。
TS 是一种 JS 的类型补充。
Web 中的 JS = ES + Web API ( DOM + BOM )
Node 中的 JS = ES + Node API ( fs + Net + etc )
TS = JS + 类型系统
如下图 3.1
ES6 介绍
ES6 中推出了两个新的关键字 let 、const 。
因为 var 存在变量提升,所以在定义之前调用变量不会报错,而是会得到一个 undefined 。这在很多编码过程中看来,是不合理的,因为变量先定义后使用,才是符合正常的思维逻辑的。故而推出了两个关键字 let 、const 。
两者都没有变量提升,因为闭包机制, 所以只在声明位置所属的块作用域内生效。
Proxy 可以理解为监听器 , 拦截器, 可以修改对象原本的方法。可以通过构造函数的方法使用,也可以在对象内部定义为 Proxy 属性的方式来调用。
Proxy 两种使用方法
Proxy 传入两个参数,都是对象格式。 target 是被拦截的对象,handler 中盛放了拦截target 的方法。如果被拦截的对象是一个空对象,那么在使用构造函数调用时候,可以用构造对象调用拦截方法会产生相同效果。
target为空对象情况
Reflect
Reflect 是一种新的 API ,将Object对象的属于语言内部的方法放到Reflect 对象上,即从 Reflect 对象上拿 Object 对象内部方法。
将用老 Object 方法报错的情况,改为返回 false。
让Object 操作变成函数行为。
Reflect 和 Proxy 有着一样的方法,两者可以相辅相成。
图片引自阮一峰 ES6
这样的操作使得拦截操作更为合理,把拦截的操作交给 Reflect ,而 Proxy 的功能主要为输出日志。
Set 不重复集合。
Symbol 具有唯一性,可以作为对象的 key ,避免重复。
生成器 Generator :内部可以通过 yeld 来分步执行。返回一个对象 { value, done}。