0%

JavaScript与ECMAScript的区别

说明
1. 参考整理自Michael Aranda的文章What’s the difference between JavaScript and ECMAScript?

概念解释

Ecma International(European Computer Manufacturers Association)

  1. 一个为科学技术制定标准的组织。

  2. 为了要举一个“标准”的例子,可以用我们曾用过的键盘来说明。是不是大多数的字母以同样的顺序排列,有一个空格键、一个输入键、箭头键,并将数字显示在最上面的一行?这是由于大多数键盘制造商的键盘设计是基于QWERTY布局标准的。

  3. ECMA-262:由Ecma International发布的标准。它包含通用目的的脚本语言的规范。

    ECMA-262
    • ECMA-262是一个类似QWERTY的标准,但不同于呈现一个键盘层的规范,它呈现了被称为ECMAScript的脚本语言规范。

    • 可以把ECMA-262当做ECMAScript参考数字

    可以把ECMA-262 当做ECMAScript的参考数字

脚本语言(A scripting language)

A programming language designed specifically for acting on an existing entity or system

什么样的编程语言是脚本语言?请思考下命令“walk”、“run” 和 “jump”。这些操作需要一些东西来执行,可能是一个人、一条狗或一个视频游戏角色。如果没有东西来执行这些命令,“walk”、“run” 和 “jump” 是没有意义的。这组操作类似于脚本语言,即专注于操纵外部实体。

ECMAScript/ECMAScript规范(ECMAScript specification)

ECMA-262中定义的标准,是用于创建通用目的脚本语言。ECMA-262是标准的名称,它代表了脚本语言规范ECMAScript。

ECMAScript提供脚本语言必须遵守的规则、细节和准则,这些才是其被视为兼容ECMAScript的判断标准。

JavaScript

一种通用目的的脚本语言,遵循ECMAScript规范。它是ECMAScript语言的一个分支版本。

通过阅读ECMAScript规范,你将学会如何创建脚本语言。通过阅读 JavaScript文档,你将学习如何使用脚本语言。

当人们把JavaScript称为“ECMAScript语言的方言”的时候,他们的意思就像谈论英语、法语或者中国方言时一样。一种方言从其母语中衍生出大部分的词汇和语法,但偏离得值得保留这些差异。

JavaScript实现了多数ECMA-262中描述的ECMAScript规范,但存在少数差异。 Mozilla在此概述了JavaScript的非ECMAScript语言功能:

JavaScript的非ECMAScript语言功能

JavaScript引擎(A JavaScript engine)/JavaScript interpreter解释器/JavaScript implementation实现

能够理解和执行JavaScript代码的程序或解释器。

JavaScript引擎通常可以在Web浏览器中被发现,包括Chrome中的 V8,火狐中的SpiderMonkey,以及Edge中的Chakra。每款引擎就像是一个用于其应用程序的语言模块,可以让其支持某种JavaScript语言的分支。

JavaScript引擎对于浏览器来说就像是人类对语言的理解一样。如果我们重新拿我们日常行为中的“走”、“跑”、“跳”来举例的话,一个 JavaScript引擎是真正能够理解这些动作是何意义的根本机制。

浏览器性能的差异

两个人也许会识别“跳”的命令,但是一个人由于理解和对命令的处理比另一个人更快些,也许会比另一个人对命令的反应更快些。类似的是,两个浏览器都可以理解JavaScript代码,但是一个由于其JavaScript引擎实现起来效率更高而运行得更快。

浏览器

浏览器支持(browser support)的差异

再以即使说同样语言的人们之间也会有差异为例。即使许多人讲英语,但是一些人也许懂得他人不懂的某些词、表达式和与语法规则,反之亦然。浏览器也是同样的道理。尽管浏览器的 JavaScript 引擎都理解 JavaScript ,但是某些浏览器会比其他的浏览器对 JavaScript 理解得更好些。在浏览器对 JavaScript 的支持中就存在着这一的差别。

至于说到浏览器支持,人们通常会谈到 “ECMAScript 兼容性(compatibility)” 而非“ JavaScript 兼容性”,尽管 JavaScript 引擎解析和执行的是 JavaScript 。这个问题说起来有点绕,下面的表格可以对其作出解释。

浏览器支持(browser support)的差异

如果你还记得的话,ECMAScript 是一份规定了脚本语言可以看起来像什么的规范。发布一个新的 ECMAScript 版本并不意味着所有现存的 JavaScript 引擎突然就拥有了这些新功能。这取决于负责那款 JavaScript 引擎的团体或组织是否要更新到最新的 ECMAScript 规范并采用其所带来的变化。

因此,开发者倾向于问这样的问题,“这款浏览器支持哪个版本的 ECMAScript ?”或者“这款浏览器支持哪些 ECMAScript 功能?”他们想知道是否 Google、Mozilla 和微软已经开始更新他们浏览器的 JavaScript 引擎了,例如 V8、SpiderMonkey 和 Chakra 是否都已经具有最新的 ECMAScript 中的功能了。

ECMASCript 兼容性列表是回答这类问题的绝佳答案参考。

如果新版的 ECMAScript 发布了,JavaScript 引擎不会一下子整合所有的更新。他们会逐渐地加入 ECMAScript 功能,这一点从火狐的 JavaScript 变更记录中可见一斑:

Firefox’s JavaScript changelog

JavaScript运行时(A JavaScript runtime)/宿主环境(Host environment)

The environment in which the JavaScript code runs and is interpreted by a JavaScript engine.The runtime provides the host objects that JavaScript can operate on and work with.

The JavaScript runtime is the “existing entity or system” mentioned in the scripting language definition. Code passes through the JavaScript engine, and once parsed and understood, an entity or system performs the interpreted actions. A dog walks, a person runs, a video game character jumps (or in the case of the above image, wrecks).

Applications make themselves available to JavaScript scripting by providing “host objects” at runtime. For the client side, the JavaScript runtime would be the web browser, where host objects like windows and HTML documents are made available for manipulation. Have you ever worked with the window or document host objects? The window and document objects are not actually a part of the core JavaScript language. They are Web APIs, objects provided by a browser acting as JavaScript’s host environment. For the server side, the JavaScript runtime is Node.js. Server-related host objects such as the file system, processes, and requests are provided in Node.js.

n interesting point: different JavaScript runtimes can share the same JavaScript engine. V8, for example, is the JavaScript engine used in both Google Chrome and Node.js — two very different environments.

ECMAScript 6

  1. 它是 ECMA-262 标准的第六个版本,其特点是对 ECMAScript 规范有着显著的变化和改进。
  2. 同义词:ES6、ES2015 和 ECMAScript 2015
  3. 这一版的 ECMAScript 将其名字由 ES6 改为了 ES2015 ,这是由于 Ecma 国际决定每年都对 ECMAScript 发布一次。相应地,Ecma 国际也开始基于每年所发布的来命名新版本的 ECMAScript 规范。简而言之, ES6 和 ES2015 是对同一件事情的两个不同的名字。