可继承内置类型
1 | // 继承Array类型 |
注意根据Babel官网,继承内置类型的编译只支持部分功能,比如DOM节点的继承可以通过Babel实现,但继承Array,Date,Error则由于ES5引擎限制,是无法实现的。
二进制和八进制字面量
ES6支持二进制(Binary)和八进制(Octal)的字面量。
使用二进制时,加前缀0b,使用八进制时,加前缀0o。
1 | 0b111110111 === 503 // true |
新增的API
1 | Number.EPSILON |
注意根据Babel官网,Babel只实现了部分新的API。
Reflect API
Reflect顾名思义为反射。反射允许对对象进行运行时级别的元操作。这个在实现代理的时候尤其有用。
1 | var O = {a: 1}; |
Reflect.ownKeys()
返回对象中自有属性属性名的数组。
静态方法Reflect.construct()
效果和new关键字一样,他等价于调用new target(…args)
。
更多方法请查阅Reflect - MDN。
尾调用优化
尾调用优化(Tail Call Optimization)保证了栈不会无限制地增长,很多递归算法都可以安全实现。
1 | function factorial(n, acc = 1) { |
出于编译性能和复杂性考虑(目前实现仍有bug),Babel暂时将尾调用优化特性移除。
知识点总结
- 知道DOM节点,Array,Date,Error等内置类型可继承,知道Babel的局限性;
- 了解二进制八进制字面量的基本用法;
- 在实际使用过程中不断熟练应用API,知道去MDN查相关文档;
- 知道ES6中有Reflect机制;
- 知道ES6中对递归函数调用进行了优化而不需要担心递归调用太深导致栈溢出问题。