Published on

ES201X

Authors
  • avatar
    Name
    Pursue
    Twitter

此 Deck 为我近期给组内分享的有关 ES 展望的 Session,如下。

先说一下我为什么讲这个 Session:之前为 Tech Radar 准备了一个 Session,是《ES2017》,可不知道为什么,在不知情的情况下就被别人给讲了,瞬间有一种被潜规则的感觉。都准备的差不多了,不讲还怪可惜的。再加上项目结束后许多同事未来可能会是 React+ES6 的技术栈,因此我就讲内容进行了调整,准备跟大家分享一下 ES 最近的几个版本的概况,这篇 Session 不能让大家学会 ES201X,只是想让大家对 ES 有一个全局的认识,最后我也会跟大家分享一下我对 JavaScript 未来的看法。

好我们言归正传。一说起 ES,就会有许多名词出现,如图:

ES,ES5,ES6,ES2015,ES2016...

其实他们的关系十分简单:ES 是 ECMAScript 的简写;每次 ES 的发布都会有一个具体的时间和版本号(即 5,6,7,8),如图:

搞清楚了名词,是时候该谈谈什么是 ECMAScript 了?我们都知道 ECMAScript 是一个标准,JavaScript 就是对这个标准的实现。那么问题来了,这个标准是怎么来的呢,谁规定的呢?

TC39 是一个推动 JavaScript 发展的组织,组内的成员大多来自于各大浏览器厂商和业内专家,他们会定期举行一些会议去讨论标准的修订以及发布。所以, 是 TC39 组织制定的 ECMAScript。(听起来好有逼格哟)

那么如果我有一些想法能否向该组织提交呢?或者我有志于为 ECMAScript 的发展贡献一己之力,想出谋划策呢?我只能说,我不确定,确切说的是很难。因为如此高逼格的组织必然有着严格的流程审批,并不是任何观点和提案都可以被接受的,那我们就来讲讲 TC39 对提案的审批流程吧。

  • 1.Stage0:strawman

这个阶段只是有一些 idea,但是 idea 的提出者必须是该组织的成员,所以是不轻易接纳外界的脑洞的(这也就是为什么你很难直接提交你的想法的原因)。

  • 2.Stage1:proposal

在 Stage0 的基础上,有更详细的解释加以说明,专家就可以去审核了。

  • 3.Stage2:draft

审核通过,此时会有对应的实现,此时是一个试验阶段,算是一个修订版。

  • 4.Stage3:candidate

针对试验的特性,不断的收集用户反馈,有十分大的可能性会加入到最近一次的发布中去。

  • 5.finished

等待发布

所以大家看到以后看 MDN 时,要留心这样的描述:比如是否试验版?是否已经纳入发布流程?当然前处在 Stage 几?

那么我们如果知道了新版 ES 的特性,能否用“ES201X 特性”这种说法呢?

答案肯定是不行的,比如我之前讲 MVVM 时有提到Object.oberseve这个方法,该方法可以监控对象上属性的变化,用来实现 MVVM 再好不过了,那时候还是草案,当时还比较看好它。最近一查才发现,已经被取消了,浏览器也不支持了,因此换作“ES201X 的提案”就比较给自己留后路啦。

所以这也是为什么开篇我没有去直接讲 ES201X 的新特性,而是从 ECMAScript 讲起。对于一个大型项目,考虑到以后的扩展性和稳定性,不要随意使用一些 JS 的新特性。 建议查 MDN 和http://kangax.github.io/compat-table/es6/

可以看出,ES6 较之 ES5 有很大的更新,其实从时间上就看得出来,20092015,这么久的跨度,必然有重大变革。但是弊端也是显然易见,我们可以毫不留情的说,这种发布也太不敏捷了。TC39 也发现了这个问题,再也不会去犯堆积大量提案无法审核的这种诟病,争取至少每年发布一次,小步提交,快速迭代。 逐一大概介绍 ES6 的特性(此处省略 010000 字)。

ES2016,这个标题一出,想必大家都有点小蒙逼,神马?ES2016 发布啦?什么时候?没错,ES2016 确实发布了,而且从 16 年初期到中期来回草案就更新了好几次,最终发布的结果如图。呵呵了吧,你可能此时的 OS 是这样的:就一个求幂和 includes 方法,word 天难到这不能自己实现吗?这有必要发布吗?太搞笑了吧。 其实一点都不儿戏,经历 ES5~ES6 的大跨度,TC39 肯定不会再像以前那样去发布新版本,尽量的做到小布提交小步发布。也许你觉得这些方法太简单了,但它能成为标准就说明它被迫切的需要,这也能看出未来 ECMAScript 将更加的标准和规范。

ES2017 更是如此,提案中的特性也相对比较轻量级,但需要注意的是这次对异步方法明确提出了改进,未来 JavaScript 将非常牛掰,ES2016 和未来的 ES2017 的发布已经将 JavaScript 推倒到了一个新的高度。

说了这么多,有人肯定会问,那我怎么用那些新版本的 JavaScript 呢?

其实很多主流的浏览器(FF, Chrome, Opera...)都已经在努力将新特性纳入自家的浏览器中,其中 FF 的支持率应该是最高的。但尽管如此,我还是建议你用 Babel,你现在就可以使用 Babel 对 ES2017 尝尝鲜。

如何看待 JS 的未来呢?

我个人认为:首先 JS 作为一门脚本语言,已经不再是程序猿眼中简单的用来操作 DOM 的工具了,它有了 Class,有了真正的异步,不再是单线程了。它的角色已经慢慢的趋于一门后端语言,变得重了,也变的强大了。以前做某种硬件的二次开发时,最常用的就是 C/C++。而现在许多第三方的接口也都有 JS 的版本了,甚至 JS 连 VR/AR 的开发都有涉猎。未来,JS 并不好学,但它必将在各个领域中扮演更加举足轻重的角色。

Thanks