我曾试着在谷歌上检索 “ JavaScript 和 ECMAScript 之间的差别。”
最初我在失掉的海量的混杂不清又互相抵触的后果中完全失望了:
“ECMAScript 是规范。”
“JavaScript 是规范。”
“ECMAScript 是标准。”
“JavaScript 是 ECMAScript 规范的完成。”
“ECMAScript 是规范化的 JavaScript。”
“ECMAScript 是一门言语。”
“JavaScript 是 ECMAScript 的一个分支。”
“ECMAScript 是 JavaScript。”
忍住,别哭。我强打精神决议做一些苦楚但却有效果的研讨。
这篇文章代表了我今朝对 JavaScript 和 ECMAScript 之间差别的了解。文章合适那些熟习 JavaScript 但又想愈加明白地了解其与 ECMAScript、web 阅读器、Babel 等是何种关系的人。你还会额定了解到剧本言语、JavaScript 引擎和 JavaScript 运转时。
那末,打起精神来吧。
下面是一系列的定义,设计的着重点在于一致性和明晰性。定义并不是百分比完好。它们被设计从微观的的层面临 JavaScript 和 ECMAScript 之间的联络和关系给出了阐明。
闲话少叙,让我们Start吧。
一个为科学技术制订规范的组织。
为了要举一个“规范”的例子(虽然并不是由 Ecma 所创造),可以用我们曾用过的键盘来讲明。是否是大大多数的字母以异样的次序陈列,有一个空格键、一个输出键、箭头键,并将数字显示在最上面的一行?这是因为大大多数键盘制作商的键盘设计是基于 QWERTY 结构规范的。
这是由 Ecma 国际发布的规范。它包括通用目标的剧本言语的标准。
ECMA-262 是一个相似 QWERTY 的规范,但分歧于出现一个键盘层的标准,它出现了被称为 ECMAScript 的剧本言语标准。
可以把 ECMA-262 当作 ECMAScript 的参考数字。
一种专门为在一种存在的实体或系统上操作而设计的编程言语。
关于怎么使编程言语成为剧本言语的惯例设法,请思索号令“walk”、“run” 和 “jump”。这些操作需求一些工具来驱动,多是一个人、一条狗或一个视频游戏脚色。假如没有操作员来履行这些号令,“walk”、“run” 和 “jump” 是没成心义的。这组操作相似于专注于把持内部实体的剧本言语。
The specification defined in ECMA-262 中定义的规范,是用于创立通用目标剧本言语的。
同义词: ECMAScript 标准
但是ECMA-262是规范的称号,它代表了剧本言语标准ECMAScript。
ECMAScript供给剧本言语必需恪守的规矩、细节和原则,这些才是其被视为兼容ECMAScript的判别规范。
一种通用目标的剧本言语,遵照 ECMAScript 标准。
它是 ECMAScript 言语的一个分支版本。
JavaScript 是我爱好编程的咖啡味言语(指代 Java 族,译者注)。ECMAScript 是它所基于的标准。经过浏览 ECMAScript 标准,你将学会怎么创立剧本言语。经过浏览 JavaScript 文档,你将进修怎么运用剧本言语。
当人们把 JavaScript 称为“ ECMAScript 言语的方言”的时分,他们的意思就像议论英语、法语或者中国方言时一样。一种方言从其母语中衍生出大部分的辞汇和语法,但偏离得值得保存这些差别。
JavaScript 完成了大多数 ECMA-262 中描绘的 ECMAScript 标准,但存在少量差别。 Mozilla 在此概述了 JavaScript 的非 ECMAScript 言语功用:
可以了解和履行 JavaScript 代码的程序或说明器。
同义词:JavaScript 说明器,JavaScript 的完成
JavaScript 引擎凡是可以在 web 阅读器中被发明,包含 Chrome 中的 V8 ,火狐中的 SpiderMonkey ,和 Edge 中的 Chakra 。每款引擎就像是一个用于其使用程序的言语模块,可让其支撑某种 JavaScript 言语的分支。
JavaScript 引擎关于阅读器来讲就像是人类对言语的了解一样。假如我们从头拿我们平常行动中的“走”、“跑”、“跳”来举例的话,一个 JavaScript 引擎是真正可以了解这些举措是何意义的基本机制。
这个比方可以帮我们说明一些关于阅读器的工作:
阅读器功能的差别
两个人或许会辨认“跳”的号令,可是一个人因为了解和对号令的处置比另外一个人更快些,或许会比另外一个人对号令的反响更快些。相似的是,两个阅读器都可以了解 JavaScript 代码,可是一个因为其 JavaScript 引擎完成起来效力更高而运转得更快。
阅读器支撑的差别
再以即便说异样言语的人们之间也会有差别为例。即便很多人讲英语,可是一些人或许理解别人不懂的某些词、表达式和与语律例则,反之亦然。阅读器也是异样的事理。虽然阅读器的 JavaScript 引擎都了解 JavaScript ,可是某些阅读器会比其他的阅读器对 JavaScript 了解得更好些。在阅读器对 JavaScript 的支撑中就存在着这一的差异。
至于说到阅读器支撑,人们凡是谈判到 “ECMAScript 兼容性” 而非“ JavaScript 兼容性”,虽然 JavaScript 引擎剖析和履行的是 JavaScript 。这个问题提及来有点绕,下面的表格可以对其作出说明。
完成 | 使用程序 | |
---|---|---|
SpiderMonkey | Firefox,Gecko结构引擎,Adobe Acrobat | 2017 |
V8 | Google Chrome,Node.js,Opera,MarkLogic | 2016 |
JavaScriptCore(Nitro) | WebKit,Safari,Qt 5 | 2017 |
Chakra | Microsoft Edge | 5.1 |
假如你还记得的话,ECMAScript 是一份规则了剧本言语可以看起来像甚么的标准。发布一个新的 ECMAScript 版本其实不意味着一切现存的 JavaScript 引擎忽然就具有了这些新功用。这取决于担任那款 JavaScript 引擎的集团或组织能否要更新到最新的 ECMAScript 标准并采取其所带来的变更。
因而,开发者偏向于问如许的问题,“这款阅读器支撑哪一个版本的 ECMAScript ?”或者“这款阅读器支撑哪些 ECMAScript 功用?”他们想晓得能否 Google、Mozilla 和微软曾经Start更新他们阅读器的 JavaScript 引擎了,例如 V8、SpiderMonkey 和 Chakra 能否都曾经具有最新的 ECMAScript 中的功用了。
ECMASCript 兼容性列表是答复这类问题的绝佳谜底参考。
假如新版的 ECMAScript 发布了,JavaScript 引擎不会一会儿整合一切的更新。他们会逐步地参加 ECMAScript 功用,这一点从火狐的 JavaScript 变卦记载中可见一斑:
JavaScript 代码运转地点的情况,并为 JavaScript 引擎所说明。运转时供给了 JavaScript 可以运转和操作的宿主工具。
同义词:宿主情况
JavaScript 运转时是在剧本化言语定义中所提到的“已存在的实体或系统”。代码经过 JavaScript 引擎通报,一旦被剖析和被了解以后,实体或系统将会履行说明行动。一条狗走路,一个人跑步,一个视频游戏中的Task腾跃(或如上图例子中的那样搞毁坏)。
使用程序经过在运转时供给“宿主工具”令其自身可用于 JavaScript 剧本。关于客户方来讲,JavaScript 运转时可所以 web 阅读器,这时候如视窗或 HTML 文档如许的宿主工具就能够用于操作了。
你能否已经运用过视窗或文档宿主工具呢?视窗和文档工具并不是真实的中心 JavaScript 言语的一部分。它们是 Web APIs ,即饰演着 JavaScript 宿主情况的阅读器所供给的工具。关于Server端来讲,JavaScript 运转时是 Node.js 。Server相干的宿主工具,如文件系统、处置和恳求都在 Node.js 中被供给。
风趣的一点是:分歧的 JavaScript 运转时可以分享异样的 JavaScript 引擎。例如 V8 ,是既为 Google Chrome 也为 Node.js 所用的 JavaScript 引擎—两个一模一样的情况。
它是 ECMA-262 规范的第六个版本,其特色是对 ECMAScript 标准有着明显的变更和改良。
同义词:ES6、ES2015 和 ECMAScript 2015
这一版的 ECMAScript 将其名字由 ES6 改成了 ES2015 ,这是因为 Ecma 国际决议每一年都对 ECMAScript 发布一次。响应地,Ecma 国际也Start基于每一年所发布的来定名新版本的 ECMAScript 标准。简而言之, ES6 和 ES2015 是对统一件工作的两个分歧的名字。
Babel
一款可以将 ES6 代码转换为 ES5 代码的转译器。
开发者可使用 ES6 中夺目的新功用,但会为他们的 web 使用担忧跨阅读器的兼容性问题。在编写这篇文章的时分,Edge 和 Internet Explorer 并没有完整地支撑 ES6 标准中的功用。
有顾忌的开发者可使用 Bable 将 ES6 代码转换为功用一样的版本,只不外运用的是 ES5 功用。一切主流的阅读器都完整支撑 ES5 ,所以他们可以在运转代码时不要担忧任何问题。
我盼望这些关于 JavaScript 和 ECMAScript 的信息对你有效。在我们完毕之前,我想要再分享一点可以让像我如许的菜鸟 web 开发者恍然大悟的信息。
先有鸡仍是先有蛋
有一段关于 JavaScript 混杂不清的汗青是它是于1996年被开发出来的。然后在1997年被提交给 ECMA 国际用于规范化任务,这招致了 ECMAScript 的降生。同时,因为 JavaScript 与 ECMAScript 标准坚持一致,所以可以说 JavaScript 是依据 ECMAScript 所完成的一个例子。
令我们觉得风趣的是:ECMAScript 是基于 JavaScript 的,而同时 JavaScript 又是基于 ECMAScript 的。
好吧,我晓得这听起来就像是一个人穿越变成了本人的怙恃一样——有点抵触,不外想起来仍是挺搞笑的。
我晓得浏览本文给你带来了很多欢喜,可是信息量仍是很丰厚的。我也要再此说再会了。
假如你有甚么问题、评论、建议或思索的话,请一吐为快。
十分感激浏览本文!
其它翻译版本 (1) 加载中 本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务