使用ES6进行开发的思考
ECMAScript6已经于近日进入了RC阶段,而早在其处于社区讨论时,我就开始一直在尝试使用ES6进行开发的方案。在Babel推出后,基于ES6的开发也有了具体可执行的解决方案,无论是Build还是Debug都能得到很好的支持。
而在有了充足的环境、工具之后,我们面临的是对ES6众多新特性的选择和分析,以便选取一个最佳的子集,让我们可以享受ES6带来的便利(减少代码量、提高可读性等)的同时,也可以顺利运行于当前以ES3-ES5为主的浏览器环境中。
经过分析后,本文试图对ES6各个特性得出是否适合应用的初步结论,并一一解释其使用场景。ES6的特性列表选自es6features。
- ★★★ 推荐使用
- ★★ 有考虑地使用
- ★ 慎重地使用
- ☆ 不使用
特性 | 推荐程度 |
---|---|
arrows | ★★★ |
classes | ★★★ |
enhanced object literals | ★★★ |
template strings | ★★★ |
destructuring | ★★ |
default + rest + spread | ★★★ |
let + const | ★★★ |
iterators + for..of | ★★ |
generators | ★ |
unicode | ☆ |
modules | ★★ |
module loaders | ☆ |
map + set + weakmap + weakset | ★★ |
proxies | ☆ |
symbols | ★ |
subclassable built-ins | ☆ |
promises | ★★★ |
math + number + string + array + object APIs | ★★★ |
binary and octal literals | ★ |
reflect api | ☆ |
tail calls | ★★ |
接下来我们以上特性挨个进行介绍。需要关注一点:如果你不想使用shim库(如Babel的browser-polyfill.js
和generatorsRuntime.js
)或者想使用尽可能少的helper(Babel的externalHelpers
配置),那么需要按你的需求进一步缩减可使用的ES6特性,如Map
、Set
这些就不应该使用。