玩转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—你离大牛只差这一步的主要内容,如果未能解决你的问题,请参考以下文章

你离BAT之间,只差这一套Java面试题。

你离BAT之间,只差这一套Java面试题。

你离BAT之间,只差这一套Java面试题,挑战阿里社招

小白也能玩转开源项目,你与大神只差这几步!

你离顶尖 Java 程序员,只差这11本书的距离

应对IBM V7000磁盘故障,你只差这一步!