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}。