Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

别拿 babel 当 ES6

  最近好多项目都基于 babel 开始全面使用 ES6 甚至 ES7 的特性了。虽然很多 ES6 特性用着很爽,比如箭头函数之类的。但是有些特性由于 polyfill 的成本比较高会增加一坨代码。又或者有些特性还需要引入一个 runtime 库,甚至有些实现都存在隐患,使用起来就要特别小心。
  通过 babel 把 ES6 的代码转换成 ES5 在前端使用已经不是什么新鲜的事情了。可是这种用法确实存在很多坑,而且这些坑是只能主动去避免的。
  ES6 中我最喜欢的特性就是箭头函数了,原来要写很大一坨的代码有了箭头函数就一行搞定。而且箭头函数的实现也不复杂,所以这类纯粹的糖语法都是可以用的,不会有什么坑。类似的还有解构等东西也是非常好用。
  然而同样是糖语法,class 就比较坑。因为 class 的逻辑比较复杂,所以当使用 class 时就会多出一坨 _classCallCheck,如果使用了 extends 让类继承与其它类的话还会多出一坨 _inherits 以及 _get。总之就是会产生一大坨奇奇怪怪的代码,如果项目很在意代码量的话就不建议使用它。
  以上这些还算比较靠谱的,至少用起来没啥问题,只是代码多了点。如果使用其它复杂的特性就可能会挂掉,因为 babel 并不会自动装载 runtime 库,比如 Promise 对象的实现等等。
  这些 runtime 库的问题至少可以通过一个库来完美模拟,也只是多了点代码,而且代码还得手动载入而已。有一些特性根本就是 ES6 中新加入的概念,很难通过 ES5 完美模拟。比如 Set 和 Map 对象虽然也提供了 polyfill 的版本,但无论如何实现都是残缺的。
  虽然很多前端项目都用了 babel 的 ES6,但确实还有很多不好用和不建议用的东西。有时候使用一个特性之前应该了解 babel 是如何实现它的,这样才能搞对自己的代码掌握地更好。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^