ECMAScript 标准
相信 Babel
大家都有用过,在 v7
之前,Babel
的 preset
里面有四个预置的阶段,分别是:
如果没有了解过 ECMAScript
标准的话,看到这四个阶段估计是一脸懵逼的,其实这是 ECMAScript 新功能发布过程中所经历的四个阶段,下面我们来详细介绍下。
JavaScript
主要有两个标准
被这两个标准所描述的语言称为 ECMAScript
,而不是 JavaScript
。换个新名字的原因也很简单,因为 Sun 公司注册了 JavaScript 的商标。
新名字里的 ECMA 来源于发起这个标准的组织,最早叫欧洲电脑制造商协会(European Computer Manufacturers Association),后来为了国际化改名叫 Ecma International 。 所以 Ecma 现在是作为一个特定名词的,而不再是缩写。
原则上来说 ECMAScript 和 JavaScript 就是一个东西,不过大多数情况下都会做如下区分:
所以网上常说的 ES6 就是 ECMAScript6 也就是 JS 的第六个版本。
Ecma 技术委员会,简称 TC39,致力于发展 JavaScript。成员有我们非常熟悉的 Adobe,苹果,Facebook,谷歌,巨硬,Mozilla,Opera,Twitter 等。
基本每两个月开一次会,会议内容可以在这个 Repo 下看到。
在 ES6 发布之后,发布过程中存在着两个比较明显的问题,分别是:
为了应对这些问题,TC39 制定了新的发布流程,也就是 TC39 process。流程如下:
值得注意的是 ES6 是第一个官方用发布年来命名的版本,从 ES6 开始到现在 2019 年 5 月,发布的时间线如下:
回到发布流程,完整的过程如下图所示。
ES2016 是根据 TC39 流程设计的第一个版本,也就是 ES6(ES2015)紧接的那一个版本。
在 ES6 之前包括 ES6,大家可能会关系浏览器是否支持 ES6。但根据新的 TC39 流程,也就是 ES2016 开始,更多关心的应该是单独的功能,而不再是版本。 只要一个功能进入了 stage 4,你就可以安全的使用它,不必等到新的 ES 版本发布。
如果你想知道新提出的功能现在进入那个阶段了,可以关注这个 Repo。 其中不仅包含了新的功能,也包含了已经完成功能的完整列表。
文章大块内容节选自 JavaScript for impatient programmers - History and evolution of JavaScript。
Babel v7 为什么弃用了所有的 stage-preset ? 详情可以看官方的博客 Removing babel's stage presets。 简单概括下就是,很多人并不理解 stage 各个阶段代表着什么,就是简单把 stage-0 加入到 babel config 里,然后开始用新功能,这导致了许多问题。比如某个功能的 stage 发生了改变,或者被弃用了的时候, 原先的配置和写法就会产生错误的结果。
Hi, I'm blastz - A Chinese Full-Stack Engineer. From HangZhou, ZheJiang. Have a look at my social media profiles below.