此Deck为我近期给组内分享的有关ES展望的Session,如下。
Slide1:
先说一下我为什么讲这个Session:之前为Tech Radar准备了一个Session,是《ES2017》,可不知道为什么,在不知情的情况下就被别人给讲了,瞬间有一种被潜规则的感觉。都准备的差不多了,不讲还怪可惜的。再加上项目结束后许多同事未来可能会是React+ES6的技术栈,因此我就讲内容进行了调整,准备跟大家分享一下ES最近的几个版本的概况,这篇Session不能让大家学会ES201X,只是想让大家对ES有一个全局的认识,最后我也会跟大家分享一下我对JavaScript未来的看法。
Slide2:
好我们言归正传。一说起ES,就会有许多名词出现,如图:
Slide3:
ES,ES5,ES6,ES2015,ES2016...
Slide4:
其实他们的关系十分简单:ES是ECMAScript的简写;每次ES的发布都会有一个具体的时间和版本号(即5,6,7,8),如图:
Slide5:
搞清楚了名词,是时候该谈谈什么是ECMAScript了?我们都知道ECMAScript是一个标准,JavaScript就是对这个标准的实现。那么问题来了,这个标准是怎么来的呢,谁规定的呢?
Slide6:
TC39是一个推动JavaScript发展的组织,组内的成员大多来自于各大浏览器厂商和业内专家,他们会定期举行一些会议去讨论标准的修订以及发布。所以, 是TC39组织制定的ECMAScript。(听起来好有逼格哟)
Slide7:
那么如果我有一些想法能否向该组织提交呢?或者我有志于为ECMAScript的发展贡献一己之力,想出谋划策呢?我只能说,我不确定,确切说的是很难。因为如此高逼格的组织必然有着严格的流程审批,并不是任何观点和提案都可以被接受的,那我们就来讲讲TC39对提案的审批流程吧。
Slide8:
- 1.Stage0:strawman
这个阶段只是有一些idea,但是idea的提出者必须是该组织的成员,所以是不轻易接纳外界的脑洞的(这也就是为什么你很难直接提交你的想法的原因)。
- 2.Stage1:proposal
在Stage0的基础上,有更详细的解释加以说明,专家就可以去审核了。
- 3.Stage2:draft
审核通过,此时会有对应的实现,此时是一个试验阶段,算是一个修订版。
- 4.Stage3:candidate
针对试验的特性,不断的收集用户反馈,有十分大的可能性会加入到最近一次的发布中去。
- 5.finished
等待发布
所以大家看到以后看MDN时,要留心这样的描述:比如是否试验版?是否已经纳入发布流程?当然前处在Stage几?
Slide9:
那么我们如果知道了新版ES的特性,能否用“ES201X特性”这种说法呢?
答案肯定是不行的,比如我之前讲MVVM时有提到Object.oberseve
这个方法,该方法可以监控对象上属性的变化,用来实现MVVM再好不过了,那时候还是草案,当时还比较看好它。最近一查才发现,已经被取消了,浏览器也不支持了,因此换作“ES201X的提案”就比较给自己留后路啦。
所以这也是为什么开篇我没有去直接讲ES201X的新特性,而是从ECMAScript讲起。对于一个大型项目,考虑到以后的扩展性和稳定性,不要随意使用一些JS的新特性。
建议查MDN和http://kangax.github.io/compat-table/es6/
Slide10:
可以看出,ES6较之ES5有很大的更新,其实从时间上就看得出来,2009~2015,这么久的跨度,必然有重大变革。但是弊端也是显然易见,我们可以毫不留情的说,这种发布也太不敏捷了。TC39也发现了这个问题,再也不会去犯堆积大量提案无法审核的这种诟病,争取至少每年发布一次,小步提交,快速迭代。
逐一大概介绍ES6的特性(此处省略0~10000字)。
Slide11:
ES2016,这个标题一出,想必大家都有点小蒙逼,神马?ES2016发布啦?什么时候?没错,ES2016确实发布了,而且从16年初期到中期来回草案就更新了好几次,最终发布的结果如图。呵呵了吧,你可能此时的OS是这样的:就一个求幂和includes方法,word天难到这不能自己实现吗?这有必要发布吗?太搞笑了吧。
其实一点都不儿戏,经历ES5~ES6的大跨度,TC39肯定不会再像以前那样去发布新版本,尽量的做到小布提交小步发布。也许你觉得这些方法太简单了,但它能成为标准就说明它被迫切的需要,这也能看出未来ECMAScript将更加的标准和规范。
Slide12:
ES2017更是如此,提案中的特性也相对比较轻量级,但需要注意的是这次对异步方法明确提出了改进,未来JavaScript将非常牛掰,ES2016和未来的ES2017的发布已经将JavaScript推倒到了一个新的高度。
Slide13:
说了这么多,有人肯定会问,那我怎么用那些新版本的JavaScript呢?
Slide14:
其实很多主流的浏览器(FF, Chrome, Opera...)都已经在努力将新特性纳入自家的浏览器中,其中FF的支持率应该是最高的。但尽管如此,我还是建议你用Babel,你现在就可以使用Babel对ES2017尝尝鲜。
Slide15:
如何看待JS的未来呢?
我个人认为:首先JS作为一门脚本语言,已经不再是程序猿眼中简单的用来操作DOM的工具了,它有了Class,有了真正的异步,不再是单线程了。它的角色已经慢慢的趋于一门后端语言,变得重了,也变的强大了。以前做某种硬件的二次开发时,最常用的就是C/C++。而现在许多第三方的接口也都有JS的版本了,甚至JS连VR/AR的开发都有涉猎。未来,JS并不好学,但它必将在各个领域中扮演更加举足轻重的角色。
Slide16:
Thanks