什么是 ECMAScript?
关于 JavaScript](https://cloudaffle.com/history-of-javascript/)的[历史以及它是如何产生的,有一个完整的故事。长话短说,ECMAScript 中的 ECMA 是指欧洲计算机制造商协会,早在 1997 年就向该协会提交了 JavaScript 1.1 进行标准化。创建了一个技术委员会,旨在标准化通用的语法和语义,跨平台和供应商中立的脚本语言。该委员会由来自 Sun Microsystems、Netscape Communication、Microsft 和其他各种公司的开发人员组成。他们提出了 ECMA-262,这是一个标准,定义了一种新的脚本语言和一种称为 ECMAScript 的通用脚本语言,所有浏览器都必须遵守该标准才能创建自己的 JavaScript 实现。
ECMAScript 未绑定到 Web 浏览器
ECMAScript 是一种跨平台、通用的脚本语言,并不仅仅与 Web 浏览器相关联。 ECMA-262 定义了可以构建更强大的脚本语言的标准。 ECMA-262 定义了语言的以下部分,根本不涉及 Web 浏览器
-
语法
-
种
-
报表
-
个关键词
-
保留字
-
运营商
-
个全局对象
JavaScript 只是将 ECMAScript 实现为一种更成熟、更健壮的脚本语言,具有各种输入和输出方法,开发人员可以反过来使用这些方法来构建各种应用程序。
ECMAScript 一致性
那么 ECMAScript 一致性意味着什么?根据 ECMA-262 中规定的标准,何时会认为编程语言符合 ECMAScript?您可以看到最新的ECMAScript 规范但实现的一致性归结为以下几点:
-
实现应支持标准中提到并在上面突出显示的语言的所有部分。
-
支持Unicode字符标准
-
符合规范的实现可能会添加规范文档中未指定的其他类型、对象、函数等。
-
扩展内置正则表达式支持。
GitHub 上有一个测试套件适用于 ECMA-262,用于测试是否符合标准。
JavaScript 引擎
JavaScript 引擎可以称为程序或解释器,它读取您的 JavaScript 代码并将其转换为机器可理解的代码。每个网络浏览器都在不同的引擎上运行,其中最常见的是谷歌的 V8 引擎,它是开源的,也是由 NodeJs 实现的。以下是各种浏览器及其使用的 JavaScript 引擎的一些常见示例:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--Q2ibHIAV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// cloudaffle.com/assets/images/posts/browser-engine.jpg)
-
谷歌浏览器 - V8 引擎
-
火狐 - 蜘蛛猴
-
Microsoft Edge - Chakra,现在也使用 V8 引擎
-
Safari - Nitro,也称为 JavaScriptCore
它是作为解释器工作的 JavaScript 引擎,夹在机器代码和 JavaScript 运行时(也称为 JavaScript 主机)之间。既然现在我们了解了什么是 JavaScript 引擎的工作,让我们更深入地研究并尝试掌握什么是 JavaScript 运行时。
JavaScript 运行时或 JavaScript 主机
JavaScript 运行时(或 JavaScript 主机)可以理解为使用 JavaScript 引擎生成 API 的容器,软件开发人员可以使用这些 API 创建使用 JavaScript 的应用程序。以浏览器中的 JavaScript 运行时为例,它通常包含更特定于浏览器的 JavsScript 实现。而像 NodeJs 这样的运行时将具有特定的实现,这些实现更具体地用于使用 JavaScript 运行和构建服务器端应用程序。
JavaScript 运行时 - NodeJS 和 Google Chrome 如何在同一 V8 引擎上运行的秘诀
由于我们现在知道什么是 JavaScript 引擎和 JavaScript 宿主环境(JavaScript 运行时),因此我们可以更好地了解 NodeJs 和 Google Chrome 如何在同一个 V8 引擎上运行,但执行非常不同的功能。秘诀在于它们确实拥有相同的 JavaScript 引擎,但 JavaScript 运行时却截然不同。让我们比较两个 JavaScript 运行时环境
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--YqU_fE2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// cloudaffle.com/assets/images/posts/javascript-runtime-vs-engine.jpg)
简而言之,浏览器的运行时可能具有以下对创建 Web 应用程序有用的基本实现:
-
The Core - JavaScript 的基本实现,具有开发人员可以使用的所有输入和输出功能。
-
文档对象模型 (DOM) - 这是浏览器呈现为节点层次结构的内容,以向客户端或用户显示 XML 和 HTML。
-
浏览器对象模型 (BOM) - 这允许开发人员操作浏览器窗口。使用 BOM,开发人员可以访问浏览器功能并在 DOM 上下文或正在呈现的页面之外操作它们。
另一方面,NodeJs 运行时将具有对开发服务器端应用程序有用的实现。它包含以下实现作为示例:
-
需要
-
缓冲区
-
进程
-
等
ES6、ES2015 或 ES Harmony。他们的意思是什么?
这是 ECMA-262 的第六版,于 2015 年发布,被称为 ES6、ES2015 和 ES Harmony。基本上所有这些术语都指的是同一版本的 ECMA-262。因此,ECMA 每年都会发布新版本的规范,因此第 7 版于 2016 年发布,依此类推。
这是 ECMA-262 的第六版,它为 ECMAScript 带来了最理想和最重要的增强集合,因此 ES6 被认为是一个里程碑,并改变了我们使用 JavaScript 的方式。这就是为什么 ES6 被认为是一个重大的变化和一种新的 JavaScript 编写方式。它为类、模块、迭代器、生成器、箭头函数、承诺、反射和许多新数据类型带来了正式支持。
那么浏览器是否支持最新标准?
答案是不! ES6 的采用水平在所有浏览器中都不一致。例如,Internet Explorer 11 仅符合 ES5 标准,而不符合 ES6,因此在支持不同版本的 ECMAScript 标准的不同浏览器之间带来了很多不兼容和混乱。使用 JavaScript 提供的最新功能编写应用程序有一种非常优雅的方式,并且仍然符合旧版浏览器。但在以后的文章中会对此进行更多介绍。