ECMA、ECMAScript、javascript、ES6、JavaScript 引擎、宿主环境、Babel 等概念
- ECMA: Ecma International,一个为科学技术制定标准的组织。
- ECMAScript(即 ECMA-262): 由 Ecma 国际发布的标准,它包含通用目的的脚本语言(如 javascript)的规范。
- 脚本语言: 一种专门为在一种存在的实体或系统(JavaScript 运行时(即宿主环境))上操作而设计的编程语言。如 javaceript
- JavaScript: 一种通用目的的脚本语言,遵循 ECMAScript 规范,它是 ECMAScript 语言的一个分支版本。有点“ECMAScript 语言衍生出的方言”的意思。JavaScript 实现了多数 ECMA-262 中描述的 ECMAScript 规范,但存在少数差异。
- JavaScript 引擎(JavaScript 解释器,JavaScript 的实现): 能够理解和执行 JavaScript 代码的程序或解释器。通常可以在 web 浏览器中,包括 Chrome 中的 V8 ,火狐中的 SpiderMonkey ,以及 Edge 中的 Chakra ,每款引擎就像是一个用于其应用程序的语言模块,可以让其支持某种 JavaScript 语言的分支。
- 浏览器性能的差异: 体现在 JavaScript 引擎实现起来效率的差异,效率越高而运行越快。
- 浏览器支持的差异: 通常是指该浏览器支持哪个版本的 ECMAScript,或者说该浏览器支持哪些 ECMAScript 功能。ECMASCript 兼容性列表是回答这类问题的绝佳答案参考。
- JavaScript 运行时(宿主环境): 提供 JavaScript 代码运行所在的环境,并为 JavaScript 引擎所解释。
视窗和文档对象并非真正的核心 JavaScript 语言的一部分。它们是 Web APIs ,即扮演着 JavaScript 宿主环境的浏览器所提供的对象。对于服务器端来说,JavaScript 运行时是 Node.js 。服务器相关的宿主对象,如文件系统、处理和请求都在 Node.js 中被提供。
有趣的是:不同的 JavaScript 运行时可以分享同样的 JavaScript 引擎。例如 V8 ,是既为 Google Chrome 也为 Node.js 所用的 JavaScript 引擎—两个截然不同的环境。
- ECMAScript 6(即 ES6、ES2015 或 ECMAScript 2015): 它是 ECMA-262 标准的第六个版本,其特点是对 ECMAScript 规范有着显著的变化和改进。
- Babel: 将 ES6 代码转换为 ES5 代码的转译器。(主要因为不同浏览器对 ES6 规范支持程度不一样导致,粗略低讲是不同浏览器的兼容性问题)
趣闻: 有一段关于 JavaScript 混淆不清的历史是它是于1996年被开发出来的。然后在1997年被提交给 ECMA 国际用于标准化工作,这导致了 ECMAScript 的诞生。同时,由于 JavaScript 与 ECMAScript 规范保持一致,所以可以说 JavaScript 是根据 ECMAScript 所实现的一个例子。令我们感到有趣的是:ECMAScript 是基于 JavaScript 的,而同时 JavaScript 又是基于 ECMAScript 的。到底是先有鸡呢,还是先有蛋呢?