玩转ECMAScript—你离大牛只差这一步
Posted 前端配送站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转ECMAScript—你离大牛只差这一步相关的知识,希望对你有一定的参考价值。
1.
什么是ECMAScript
首先既然要更好的了解,起码得先说说什么是ECMAScript。
ECMAScript 是一种由ECMA 国际(前身为欧洲计算机制造商协会)通过ECMA-262 标准化的脚本程序设计语言。
看起来出现了很多奇怪的名词,ECMA 国际?ECMA-262 ?黑人问号???
那么然后来稍微介绍一下什么是ECMA 国际。
ECMA国际
Ecma 国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。
因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。
与国家政府标准机构不同,Ecma 国际是企业会员制的组织。组织的标准化过程比较商业化,自称这种营运方式减少官僚追求效果。
上面这些信息都可以在WIKI 中找到。大家可以很明确的看到,Ecma 国际是一家和企业密切相连的组织,所以Ecma 国际制定的规范都是由各类企业来做主要的制定和推广。
那么既然说到了Ecma 国际,那么它都做了些什么事呢?
其实Ecma 国际负责了很多标准的制定,比如有如下这些规范。大家可以看到这里面有我们今天的主角,ECMAScript 规范。
CD-ROM 格式(之后被国际标准化组织批准为ISO 9660)
C#语言规范
C++/CLI语言规范
通用语言架构(CLI)
ECMAScript 语言规范(javascript)
Eiffel 语言
电子产品环境化设计要素
Universal 3D 标准
OOXML
Dart 语言规范
2.
JAVASCRIPT的诞生
在说ECMA262 之前,我们先来讲讲javascript 的历史。
在1994年,Netscape 发布了Navigator0.9,但是因为那个时候的浏览器缺乏和用户有良好交互的能力。所以Netscape 急切渴望一门可以在浏览器中运行,可以提供一定用户交互的语言。
然后在1995年,Netscape 让Brendan Eich 去开发这门语言。然而,javascript 诞生了。
然而在此之后,Microsoft 推出了一门类似的语言,JScript。
Netscape 为了提升javascript 的竞争力,于是将javascript 提供给ECMA组织进行标准化。
然后,1997年7月,ECMA262 标准出台。
时隔14年之后,ECMA-262 标准也被另一个国际标准化组织ISO (International Organization for Standardization) 在2011年6月批准,标准号是ISO-16262。
ECMAScript 作为一门脚本程序设计语言标准,并不只有javascript 这一种实现,它也有很多的方言实现。比如有下面这些语言:
JavaScript
Ejscript
JScript .NET
ActionScript
DMDScript
CriScript
InScript
3.
飞速发展和稳定期
在ECMAScript 规范初版发布后不久。
1998年6月,ECMAScript 2.0 发布。
1999年12月,ECMAScript 3.0 发布。
这时,ECMAScript 规范本身也相对比较完善和稳定了,但是接下来的事情,就比较悲剧了。
2007年10月。。。。ECMAScript 4.0 草案发布。
这次的新规范,历时颇久,规范的新内容也有了很多争议。
在制定ES4 的时候,是分成了两个工作组同时工作的。
一边是以Adobe, Mozilla, Opera 和Google为主的ECMAScript 4 工作组。
一边是以Microsoft和Yahoo为主的ECMAScript 3.1 工作组。
ECMAScript 4 的很多主张比较激进,改动较大。而ECMAScript 3.1 则主张小幅更新。
最终经过TC39 的会议,决定将一部分不那么激进的改动保留发布为ECMAScript 3.1,然后将一部分比较激进的部分放置到ES.NEXT 中,命名为Harmony(和谐),留待以后再进行商榷。
接下来,ECMAScript 3.1 变成了ECMAScript 5,而ES.NEXT 中的那些特性,则有着相当一部分被ECMAScript 6,也就是ECMAScript 2015 所吸收了。所以说虽然ECMAScript 4 被废弃了,但是它终究还是通过另一种方式活了下来。
然后,2009年12月,ECMAScript 5 发布。
2011年6月,ECMAScript 5.1 发布。
TC39
中间插个小话题。其实在前面大家仔细看,会发现有个名词,TC39。为了接下来的内容,所以先来解释一下TC39 是什么。
TC(Technical Committees)
TG(Task Groups)
在ECMA 国际,每个标准都会有一个TC 来负责,而一个TC 中可能会有不同的TG 来负责不同的工作。而负责ECMA262,也就是我们所说的ECMAScript 的就是TC39(以前叫TC39-TG1)。
Ecma organisation 在这里我们可以看到各个TC,并且可以查看其负责的标准。
4.
ECMAScript 2015
接下来是一部重头戏。
2015年6月,ECMAScript 6,也就是ECMAScript 2015 发布了。
新的规范中,带有大量ECMAScript 4 中激进特性,以及常年的提案积累。所以ECMAScript 6 里和前一版标准有了非常大的差别。
从ECMAScript 6 开始,标准有了新的,更加规范化和快速的制定流程。面对着每年一次的,频繁的标准更替,再采用1234的版本号来标注规范显得不太合适。所以从ECMAScript 6 开始,就开始采用年号来做版本。即ECMAScript 2015。
5.
新的规范制定流程
在新的规范制定流程中,要求成文标准要从事实标准中诞生,实现先于标准存在,大家可以在接下来的流程说明中看出来。
每个新特性,从开始到完成一共要经历5个阶段
Strawman (稻草人)阶段
任何人都可以提交pull request到 GitHub - tc39/ecma262: Status, process, and documents for ECMA262
可以是一个提议,想法,初步描述
Proposal(提案)阶段
TC39制定成员作为champion
TC39审阅通过
有实现的Demo 或者Polyfill
初步描写标准的语义语法算法复杂度解决的问题等
Draft(草案)阶段
有两个或两个以上的实现(包括babel这类的转译实现)
使用正式的语言描述该语法,api等
Candidate(候选)阶段
至少2个实现,可以为实验性实现
ECMAScript spec editor 通过审核
TC39 review 通过
文本编写完成
Finished(完成)阶段
编写test 262 测试用例
通过两个实现该特性的内核测试
ECMAScript spec editor 通过审核
开发者表示支持和认可
接下来,在每年的3月和9月,都会提交新特性的申请,在ECMA General Assembly通过以后,被添加到标准中去。
值得注意的是,TC39 每年的工作日程也是规划好了的。
每年的3月,TC39 会召开会议,将完成的特性添加到标准中。
每年的4月到6月,会由ECMA CC 和ECMA CG 来做Review。
每年的7月,批准通过新标准并且发布。所以,ECMAScript 2016 标准,其实也已经正式发布了,虽然只新增了两个特性。我们现在已经可以开始看ECMAScript 2017 的草案了。
6.
ECMAScript2016
在2016的版本里只新增了两个特性,用的人可能也不多,所以大家的关注度并不高。
Array.prototype.includes
Exponentiation Operator
这是两个很简单的特性,所以也不多做介绍了。
7.
ECMAScript2017
而在2017的版本里,有一个非常值得大家期待的新特性,那就是async await。作为我们目前的异步终极解决方案,也是如大家所期望的正式进入标准。
还有一个很有说头的新方法,就是字符串填充。padstart 和padend。为什么有说头呢,当初node 圈发生的leftpad 事件,我想大家也是有所耳闻的。这个方法正可以用来取代leftpad。
其余的特性还有
Object.values/Object.entries
Trailing commas in function and json
Object.getOwnPropertyDescriptors
Shared memory and atomics
8.
迷茫的新特性
对于有些人来说,前端的更新总是很突兀,很让人迷茫。
但是其实不是的。变化总是一点一点发生的。
GitHub - tc39/proposals: Tracking ECMAScript Proposals
我们可以在TC39 的Github 仓库中找到完成了,废弃的,以及正在进行中的提案。
多去关注这些东西,对于很多新事物的到来,我们也就不会有多惊讶了。
9.
别的ECMA 标准?
和ECMAScript 有关的标准只有ECMA262吗?
其实不是。
和ECMAScript 有关的标准有ECMA262,ECMA290,ECMA327,ECMA357,ECMA402,ECMA404,ECMA414等等。
其中290,327,357等等没有推广开来,被废弃。
ECMA 262 是语言规范本身。
ECMA 402 则是制定一些基于ECMAScript 5 或者之后版本的一些国际化API 标准。
ECMA 404 是JSON 规范。
ECMA 414 则规定了哪些规范是和ECMAScript 有关的。目前内部就包含了262,402和404。
备注
如果大家想更好的关注标准的变化,可以订阅TC39 的邮件组,关注TC39 的Github,并且在Twitter 上关注TC39 的成员。
前端配送站
以上是关于玩转ECMAScript—你离大牛只差这一步的主要内容,如果未能解决你的问题,请参考以下文章