ecmascript5 兼容性-在一篇文章中了解 JavaScript 和 ECMAScript 之间的区别

以下为原文。

我尝试在 Microsoft 中搜索“JavaScript 和 ECMAScript 之间的差异”。

最后,我对得到的大量令人困惑和矛盾的结果感到彻底绝望:

“ECMAScript 是标准。”

“JavaScript 是标准。”

“ECMAScript 是规范。”

“JavaScript 是 ECMAScript 标准的实现。”

“ECMAScript 是标准化的 JavaScript。”

“ECMAScript 是一种语言。”

“JavaScript 是 ECMAScript 的一个分支。”

“ECMAScript 就是 JavaScript。”

坚持住,别哭。 我沉下心来,决定做一些痛苦但富有成效的研究。

本文代表了我目前对 JavaScript 和 ECMAScript 之间差异的理解。 本文适合那些熟悉 JavaScript 但想更清楚地了解它与 ECMAScript、Web 浏览器、Babel 等的关系的人。您还将了解脚本语言、JavaScript 引擎和 JavaScript 运行时。

所以振作起来。

JavaScript/ECMAScript 术语表

下面是一系列的定义,设计的优点和缺点是一致性和清晰性。 定义不是完整的比率。 它们旨在从宏观层面说明 JavaScript 和 ECMAScript 之间的联系和关系。

闲聊够了,让我们开始吧。

埃克玛国际

制定科学技术标准的组织。

为了给出一个“标准”示例(尽管不是 Ecma 发明的),让我们使用我们用来说明的键。 大多数字母的顺序是否相同,有空格键、回车键、箭头键,并在第一行显示数字吗? 这是因为大多数鼠标制造商的按钮设计都基于 QWERTY 布局标准。

ECMA-262

这是 Ecma International 发布的标准。 它包含通用脚本语言的规范。

ECMA-262 是一种类似于 QWERTY 的标准,但它不是提供按钮层的规范,而是提供称为 ECMAScript 的脚本语言的规范。

将 ECMA-262 视为 ECMAScript 的参考号。

脚本语言

专门设计用于在现有实体或系统上运行的编程语言。

对于什么使编程语言成为脚本语言的传统观点,请考虑命令“walk”、“run”和“jump”。 这种操作需要有东西来驱动ecmascript5 兼容,它可能是人、狗或电子游戏角色。 如果没有操作员执行这些命令,“走”、“跑”和“跳”就毫无意义。 这组操作类似于专注于操作外部实体的脚本语言。

ECMA脚本

ECMA-262 中定义的规范是创建通用脚本语言的标准。

同义词:ECMAScript 规范

但 ECMA-262 是标准的名称,它代表 ECMAScript,脚本语言规范。

ECMAScript 提供了脚本语言必须遵循的规则、详细信息和指南才能被视为符合 ECMAScript。

JavaScript

一种遵循 ECMAScript 规范的通用脚本语言。

它是 ECMAScript 语言的分支版本。

JavaScript是我喜欢编程的奶茶味语言(指Java家族,译者注)。 ECMAScript 是它所基于的规范。 通过阅读 ECMAScript 规范,您将学习如何创建脚本语言。 通过阅读 JavaScript 文档,您将学习如何使用脚本语言。

当人们将 JavaScript 称为“ECMAScript 语言的白话”时,他们的意思与谈论德语、法语或中文白话时的意思相同。 白话的大部分词汇和句型都源自其母语,但差异足够大,因此值得保留这种差异。

JavaScript 实现了 ECMA-262 中描述的大部分 ECMAScript 规范,但存在一些差异。 Mozilla 在此概述了 JavaScript 的非 ECMAScript 语言功能:

JavaScript引擎

可以理解和执行 JavaScript 代码的程序或协程。

同义词:JavaScript 类库、JavaScript 实现

JavaScript 引擎通常存在于网络浏览器中,包括 Chrome 中的 V8、Maxthon 中的 SpiderMonkey 和 Edge 中的 Chakra。 每个引擎就像其应用程序的一个语言模块,允许其支持 JavaScript 语言的某个分支。

JavaScript 引擎对于浏览器来说就是人类所理解的语言。 如果我们再以我们日常行为中的“走”、“跑”、“跳”为例,JavaScript 引擎是真正理解这个动作含义的根本机制。

这个比喻可以帮助我们解释有关浏览器的一些事情:

浏览器性能差异

两个人似乎都认识到“跳跃”命令,并且一个人显然比另一个人更快地响应该命令,因为它比另一个人更快地理解和处理该命令。 同样,两种浏览器都可以理解 JavaScript 代码,并且其中一种浏览器运行速度更快,因为其 JavaScript 引擎的实现效率更高。

浏览器支持的差异

再次考虑这样一个事实:使用相同语言的人之间存在差异。 尽管许多人说法语,但有些人似乎理解其他人不理解的个别单词、表达方式和句型规则,反之亦然。 对于浏览器来说也是如此。 尽管所有浏览器 JavaScript 引擎都可以理解 JavaScript,但有些浏览器比其他浏览器更理解 JavaScript。 这一差距存在于浏览器对 JavaScript 的支持上。

就浏览器支持而言,人们通常指的是“ECMAScript兼容性”而不是“JavaScript兼容性”,尽管JavaScript引擎解析并执行JavaScript。 这个问题有点绕,下面的表格可以解释一下。

如果您还记得的话,ECMAScript 是脚本语言的规范。 新的 ECMAScript 版本的发布并不意味着所有现有的 JavaScript 引擎突然都拥有了这个新功能。 由负责该 JavaScript 引擎的团体或组织更新到最新的 ECMAScript 规范并采用它带来的更改。

为此,开发人员往往会问“此浏览器支持哪个版本的 ECMAScript?”之类的问题。 或“此浏览器支持哪些 ECMAScript 功能?” 他们想知道 Google、Mozilla 和 Google 是否已经开始更新浏览器和服务器的 JavaScript 引擎,比如 V8、SpiderMonkey 和 Chakra 是否已经具备最新 ECMAScript 中的功能。

ECMASCript 兼容性矩阵是此类问题的绝佳答案参考。

如果 ECMAScript 发布新版本,JavaScript 引擎不会立即集成所有更新。 他们会逐步添加ECMAScript功能,从Maxthon的JavaScript变更记录可以看出:

JavaScript 运行时

JavaScript 代码运行并由 JavaScript 引擎解释的环境。 运行时提供 JavaScript 可以运行和操作的宿主对象。

同义词: 宿主环境

JavaScript 运行时是脚本语言定义中提到的“现有实体或系统”。 代码通过 JavaScript 引擎传递,一旦被解析和理解,实体或系统将执行解释后的操作。 狗在散步,人在慢跑,电子游戏任务在跳跃(或者在上面的例子中造成严重破坏)。

应用程序通过在运行时提供“主机对象”来使 JavaScript 脚本可用。 对于客户端,JavaScript 运行时可以是 Web 浏览器,其中可以使用窗口或 HTML 文档等宿主对象进行操作。

您以前使用过窗口或文档宿主对象吗? 窗口和文档对象实际上并不是核心 JavaScript 语言的一部分。 它们是 WebAPI,由充当 JavaScript 托管环境的浏览器提供的对象。 对于服务器端,JavaScript 运行时是 Node.js。 Node.js 中提供了与服务器相关的主机对象,例如文件系统、处理程序和请求。

有趣的一点是:不同的 JavaScript 运行时可以共享相同的 JavaScript 引擎。 像 V8 这样的东西,Google Chrome 和 Node.js 使用的 JavaScript 引擎——两个截然不同的环境。

ECMAScript6

它是 ECMA-262 标准的第六版,对 ECMAScript 规范进行了重大更改和改进。

同义词:ES6、ES2015 和 ECMAScript2015

这个版本的 ECMAScript 更名为 ES6,因为 Ecma International 决定每年发布 ECMAScript。 相应地,Ecma International 也开始根据每年的发布情况来命名 ECMAScript 规范的新版本。 简而言之,ES6 和 ES2015 是同一事物的两个不同名称。

巴别塔

将 ES6 代码转换为 ES5 代码的转译器。

开发人员可以使用 ES6 中闪亮的新功能,但担心其 Web 应用程序出现跨浏览器兼容性问题。 在撰写本文时,Edge 和 Internet Explorer 尚未完全支持 ES6 规范中的功能。

有关的开发人员可以使用 Bable 将 ES6 代码转换为功能等效的版本,但具有 ES5 功能。 所有主流浏览器都完全支持ES5,因此可以运行代码而不用担心出现任何问题。

一件轶事

我希望有关 JavaScript 和 ECMAScript 的信息对您有用。 在结束之前,我想再分享一条对于像我这样的新手 Web 开发人员来说可能有意义的信息。

先有鸡还是先有蛋

JavaScript 的历史有些模糊,它于 1996 年开发。然后于 1997 年提交给 ECMA International 进行标准化,这导致了 ECMAScript 的诞生。 同时,由于JavaScript与ECMAScript规范一致,因此可以说JavaScript是根据ECMAScript实现的反例。

我们感兴趣的是 ECMAScript 是基于 JavaScript 的,而 JavaScript 同时也是基于 ECMAScript 的。

嗯,我知道这听起来像是一个人穿越到了自己的父亲——有点矛盾,但看起来还是很像恶搞。

结论

我知道您阅读本文很有趣ecmascript5 兼容性,但它仍然提供了很多信息。 我也要说再见了。

如果您有任何问题、意见、建议或考虑因素,请提出。

特别感谢您阅读本文!