【译】ES5, ES6, ES2016, ES.Next: JavaScript 各个版本都是什么?

举报
gentle_zhou 发表于 2022/03/04 15:52:52 2022/03/04
【摘要】 JavaScript 有一段很奇怪的命名史。

前段时间在学习开发JS项目的时候,会在配置文件里看到es2016, es6这些奇怪的字眼在lib里;就很好奇到底都是什么,于是在网上搜到了这篇文章,翻译并分享一波。

JavaScript 有一段很奇怪的命名史。

1995 年,它作为网景浏览器(Netscape Navigator)的一部分首次发布,网景公司给这个新语言命名为 LiveScript。一年之后,为了搭上当时Java 普遍流行的顺风车,又将其改名为 JavaScript (当然,Java 和 JavaScript 的关系,就像下图所说的一样完全没有关系)。

image.png

英文版的解释,就像火腿(ham)和仓鼠(hamster)一样,名字类似但其实代表的完全不是一个东西:
image.png

Java 和 JavaScript的区别列表

Java 与 JavaScript 之间的主要区别:

  • Java 是一种 OOP 编程语言,而 Java Script 是一种 OOP 脚本语言。
  • Java 是 SUN Microsystems 公司推出的新一代面向对象的程序设计语言;而Javascript 是 Netscape 公司的脚本语言。
  • Java 创建在虚拟机或浏览器中运行的应用程序,而 JavaScript 代码仅在浏览器中运行。
  • Java 代码需要进行编译,而 JavaScript 代码都在文本中。
  • 在 HTML 文档中,两种编程语言的标识不同,Java 使用 Applet 来标识;而Javascript 使用<script></script> 来标识。

继续翻译

1996年,Netscape公司将 JavaScript 提交给 ECMA International(欧洲计算机制造商协会) 进行标准化,并最终确定了这个新语言的标准,即ECMAScript。从这个时候开始,ECMAScript成为了所有 JavaScript 语言实现的基础。但是因为 JavaScript 这个名字的历史原因和市场原因(ECMAScript 这个名字念起来拗口且并不讨喜),现实中我们只用ECMAScript 来代表标准(表示与其他事物不同的规则),而语言本身我们依然称其为JavaScript 。

但是这对JavaScript 开发者们几乎没什么影响,因为在它诞生之后的头15年里,ECMAScript并没有有发生什么大的变化,而且现实世界里很多实现的方式和标准了有了非常大的区别。在ECMAScript 发布之后,其实很快又发布了两个版本;但是在1999年发布了ECMAScript 3之后,10年之内官方标准里都没有任何改动。取而代之的是,各个浏览器厂商在开发自己的语言拓展,web开发者们只能去尝试支持这些API。即使在2009年ECMAScript 5 发布之后,依然花了好几年才让大部分浏览器支持这些标准,而且大部分开发者们依然坚持写着 ECMAScript 3 风格的代码,并没有觉得去了解这些标准很重要。

到了大约2012年,事情才发生了转变。越来越多人开始推动停止对旧版本互联网浏览器的支持,用ECMAScript 5 (ES5)风格来写代码也开始变得可行了。而在同一时刻,ECMAScript的新标准也正在启动;也就在这时候开始,大家才意识到JavaScript的实现其实是基于各种不同ECMAScript标准的支持。在最终被命名为ECMAScript 6th Edition (ES6)之前,这个版本一开始被称为ES.Harmony(和谐)。在2015年,负责ECMAScript规范草案的委员会TC39 决定每年都定义一个新的标准制度;也就是说,一旦新特性被批准就可以被添加进标准里,而不是像先前那样,只有在整个草案的所有特性都没问题之后才会被确认加入标准里。因此,ECMAScript 6th edition在6月份发布之前,又被重新命名为了ECMAScript 2015 (ES2015)。

目前(该博文发布的2015年9月的时候),仍然有一些新的 JavaScript 特性或语法正在提议中,包括 decorators,async-await(异步编程模型) 和 static class properties(静态类属性)。它们通常被称为 ES7,ES2016 或者 ES.Next 的特性,不过它们实际上只能被称作提案或者说可能性;因为毕竟 ES2016 的规范还没有写出来,有可能全部都会被加入,也有可能一个都不会。TC39 把一个提案分为 4 个阶段,你可以在 Babel 的官网 上查看各个提案目前都在哪个阶段了。
image.png

注:像文章里说的decorators在2021/12 进入了激活提案阶段2(阶段2表明委员会希望开发这些特性,并最终将其包含在标准中)。

所以这么多术语我们该怎么区分呢?下面的列表或许能帮助到你:

  • ECMAScript:一个由国际ECMA 标准化,TC39 委员会监督的语言。通常用于指代标准。
  • JavaScript:ECMAScript 标准实现的常用称呼。该术语并不局限于某个特定版本的 ECMAScript 标准,并可能被用于任何不同程度任意版本的 ECMAScript 的实现。
  • ECMAScript 5 (ES5):ECMAScript 的第五版修订,在 2009 年完成标准化。这个规范可以说在所有现代浏览器中都相当完全的实现了。
  • ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015):ECMAScript 的第六版修订,在 2015 年完成标准化;这个标准已经在大部分现代浏览器中被部分实现。可以查阅这张es6兼容性表来查看不同浏览器和工具的实现情况。
  • ECMAScript 2016:预估第七版 ECMAScript 的修订,计划于明年(2016)夏季发布。
  • ECMAScript Proposals:被考虑加入未来ECMAScript 标准版本的特性与语法提案;需要经历五个阶段:Strawman(稻草人),Proposal(提议),Draft(草案),Candidate(候选人)以及 Finished (已完成)。

注:从ECMA2016开始,版本的名字就不再以数字ES7/ES8来代替了,直接以年份来称呼了,比如ECMAScript 2016 / 2017 / 2018。


作者对博客的解释:
(2015年的时候)在这整篇博客中,我把目前的ECMAScript 版本称作ES6(因为这是大部分开发者最习以为常的),把明年的规范称作 ES2016(因为就像前面注解里解释的一样,与ES6/ES2015 不同,ES2016这个名字将在整个标准化过程中沿用)并且将那些还没有成为ECMAScript 定稿或草案的未来语言概念称为 ECMAScript/JavaScript 提案。我将尽我最大努力在任何可能引起困惑的场合都使用这篇文章。

更多资源

文章链接

  1. https://benmccormick.org/2015/09/14/es5-es6-es2016-es-next-whats-going-on-with-javascript-versioning
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。