使用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这些就不应该使用。