Skip to content

语法和API - 理解ECMAScript和JavaScript的关系 #39

@logan70

Description

@logan70

理解ECMAScript和JavaScript的关系

ECMA

ECMA国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。

ECMA国际负责了很多标准的制定:

  • CD-ROM格式(之后被国际标准化组织批准为ISO 9660)
  • C#语言规范
  • C++/CLI语言规范
  • 通用语言架构(CLI)
  • ECMAScript语言规范(JavaScript)
  • Eiffel语言
  • 电子产品环境化设计要素
  • Universal 3D标准
  • OOXML
  • Dart语言规范

ECMAScript

1994年,Netscape 发布了 Navigator0.9,但是因为那个时候的浏览器缺乏和用户有良好交互的能力。所以 Netscape 急切渴望一门可以在浏览器中运行,可以提供一定用户交互的语言。

1995年,Netscape 公司的 Brendan Eich开发了 JavaScript 语言。

1996 年 11 月, Netscape 公司决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。

1997 年 7 月,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。

所以说ECMAScript是一门脚本程序设计语言标准,当然其实现也不只有JavaScript这一种,比如以下语言也是ECMAScript标准的实现:

  • Ejscript
  • JScript .NET
  • ActionScript
  • DMDScript
  • CriScript
  • InScript

TC39

TC(Technical Committees),代表技术委员会。在ECMA国际,每个标准都会有一个 TC 来负责,而负责 ECMA262标准,即 ECMAScript 的,就是 TC39。

关于ECMAScript的提案可以在TC39的Github仓库中查看:https://github.com/tc39/proposals

ECMAScript6

2015年6月,ECMAScript 6,也就是 ECMAScript 2015 发布。

从 ECMAScript 6 开始,标准有了新的,更加规范化和快速的制定流程。面对着每年一次的,频繁的标准更替,再采用1234的版本号来标注规范显得不太合适。所以从 ECMAScript 6 开始,就开始采用年号来做版本。即 ECMAScript 2015。

现在所提到的ECMAScript6则是泛指ECMAScript 2015及之后的版本。

规范制定流程

在新的规范制定流程中,要求成文标准要从事实标准中诞生,实现先于标准存在。

具体流程规范详见 https://tc39.es/process-document/

每个新特性,从开始到完成一共要经历5个阶段。

stage0 - strawman(稻草人)阶段

任何人都可以提交pull request到 GitHub - tc39/ecma262: Status, process, and documents for ECMA262,可以是一个提议,想法,初步描述。

stage1 - proposal(提案)阶段

  • TC39制定成员作为 champion
  • TC39审阅通过
  • 有实现的 Demo 或者 Polyfill
  • 初步描写标准的语义语法算法复杂度解决的问题等

stage2 - Draft(草案)阶段

  • 至少2个实现,可以为实验性实现
  • ECMAScript spec editor 通过审核
  • TC39 review 通过
  • 文本编写完成

stage3 - Candidate(候选)阶段

  • 至少2个实现,可以为实验性实现
  • ECMAScript spec editor 通过审核
  • TC39 review 通过
  • 文本编写完成

stage4 - Finished(完成)阶段

  • 编写 test 262 测试用例
  • 通过两个实现该特性的内核测试
  • ECMAScript spec editor 通过审核
  • 开发者表示支持和认可

JavaScript

  • JavaScript 是 ECMAScript 语言标准的一种实现
  • JavaScript 有浏览器、Node.js 等多种宿主环境,是一种日常的通称,各种宿主所扩充的 API 有差异,比如浏览器有 各种Dom APIWeb API,而 Node.js 有 process,这些在统一语法规范 ECMAScript 中没有规定

参考文章

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions