JavaScript 和 ECMAScript 有啥区别?

Posted

技术标签:

【中文标题】JavaScript 和 ECMAScript 有啥区别?【英文标题】:What is the difference between JavaScript and ECMAScript?JavaScript 和 ECMAScript 有什么区别? 【发布时间】:2010-10-29 02:07:31 【问题描述】:

ECMAScript 和 javascript 有什么区别?根据我的推断,ECMAScript 是标准,JavaScript 是实现。这是正确的吗?

【问题讨论】:

【参考方案1】:

我认为应该上一点历史课。

JavaScript 最初名为 Mocha,后来改为 Livescript,但最终变成了 JavaScript。

请务必注意,JavaScript 出现在 ECMAscript 之前,历史会告诉您原因。

一开始,JavaScript 的名字来源于 Java,最初 Brendan Eich(JS 的创造者)被要求为 Netscape 开发一种类似于 Java 的语言。

但是,Eich 认为 Java 的所有规则都过于复杂,因此着手创建一种更简单的语言,即使是初学者也可以编写代码。这在诸如放宽对分号的需求之类的事情上很明显。

语言完成后,Netscape 的营销团队要求 Sun 允许他们将其命名为 JavaScript 作为营销噱头,因此大多数从未使用过 JavaScript 的人认为它与 Java 有关。

在 JavaScript 在浏览器中发布大约一两年后,微软的 IE 采用了这种语言并开始制作自己的实现,例如 JScript。与此同时,IE 在市场上占据主导地位,不久之后 Netscape 不得不关闭其项目。

在 Netscape 倒闭之前,他们决定制定一个标准来指导 JavaScript 的发展,名为 ECMAScript。

ECMAScript 发布了几个版本,在 1999 年他们发布了他们的最后一个版本(ECMAScript 3),然后它们进入休眠状态 10 年。在这 10 年里,微软占据了主导地位,但同时他们并没有改进他们的产品,因此 Firefox 诞生了(由 Eich 领导)和一大堆其他浏览器,如 Chrome、Opera。

ECMAScript 于 2009 年发布了其第 5 版(第 4 版已被废弃),具有严格模式等功能。从那时起,ECMAScript 获得了很大的动力,并计划在几个月后发布其第 6 版,这是迄今为止最大的变化。

您可以在此处http://kangax.github.io/es5-compat-table/es6/ 使用 ECMAScript 6 的功能列表以及浏览器支持。您甚至可以像使用 CoffeeScript 一样开始编写 Ecmascript 6,并使用编译器编译成 Ecmascript 5。

ECMAScript 是语言还是 JavaScript 是方言是有争议的,但并不重要。如果你继续这样想,你可能会感到困惑。没有可以运行 ECMAScript 的编译器,我相信 JavaScript 被认为是实现称为 ECMAScript 的标准的语言。

还有其他值得注意的实现 ECMAScript 的语言,例如 ActionScript(用于 Flash)

【讨论】:

对于那些对如何将新的 ES2015 标准编译/转换为 ECMAScript 5 代码感兴趣的人,您可以查看babeljs.io 上的 Babel(以前是 6to5)或github.com/google/traceur-compiler 上的 traceur。有了这些工具,您没有理由不能立即开始编写“新 JavaScript”,并充分利用该语言的所有最新功能。 我不知道 Lua 实现了 ECMAScript。我似乎找不到任何可以证实这一点的东西。你的来源是什么? @YangLi 您是否同意下面 jerone 的回答,即 ECMAScript 语言不包括我们在编写纯 JavaScript 时都使用的 DOM API? @theJollySin 是的,他是对的。 ECMAScript 不是专门为浏览器设计的,所以像 document.getElementById 和其他 DOM API 之类的方法不是标准的一部分。它们属于 WHATWG 标准,以及其他一些特定于浏览器的方法,如 localStorage 等。如果你使用 node 并且不使用任何导入的模块,那么你只有 ECMAScript 的 API。 多种语言如何实现相同的标准而不是相同的语言?标准定义语言。如果某种语言实现了 C++ 标准,则称为 C++,而不是其他语言(确切地说因为它实现了该标准)。所以我仍然有同样的问题......有什么区别?【参考方案2】:

ECMAScript 是一种语言,而 JavaScript、JScript 甚至 ActionScript 3 都被称为“方言”。 Wikipedia 对此有所了解。

【讨论】:

真正好的是 JavaScript 和 ECMAScript 版本之间的清晰映射,例如ES5对应JS1.5等啊我找到了:en.wikipedia.org/wiki/JavaScript#Versions @Sam -- 更新 Sam 的链接:en.wikipedia.org/wiki/JavaScript#Version_history 对杨丽的投反对票和投赞成票,因为这个答案说得很少,基本上指向***。杨丽的回答更加详细和有用。此外,根据我的理解,一种是语言/标准,另一种是方言,还是实施等,都可以接受意见,而不是事实。而这个答案使它看起来是事实。如果我错了,请纠正我。事实上,我认为这个答案的建议甚至不是普遍的共识。正如大多数人看到的那样,ECMAScript 具有标准和 JavaScript 作为语言。 @Rop - 更新到该链接:en.wikipedia.org/wiki/ECMAScript#Version_correspondence 我不同意。 ECMAScript 是规范。 JS、JScript、ActionScript 是实现这种规范的语言。【参考方案3】:

ECMAScript = ES:

ECMAScript 是脚本语言的标准。

Javascript 等语言基于 ECMAScript 标准。

ECMA 标准基于多种原始技术,其中最著名的是 JavaScript(Netscape)和 JScript(Microsoft)。

ECMA 表示欧洲计算机制造商协会

JavaScript = JS:

JavaScript 是 ECMAScript 标准最流行的实现。

Javascript 的核心功能基于 ECMAScript 标准, 但 Javascript 还具有其他未包含的附加功能 ECMA 规范/标准。

ActionScript 和 JScript 是实现 ECMAScript 的其他语言。

JavaScript 已提交给 ECMA 进行标准化,但由于名称 Javascript 的商标问题,该标准被称为 ECMAScript。

每个浏览器都有一个 JavaScript 解释器。

ES5 = ECMAScript 5:

ES5 是 ECMAScript 的一个版本(旧版本/当前版本)。

ES5 是您今天在浏览器中了解和使用的 JavaScript。

ES5 不需要构建步骤(转译器)即可将其转换为可在当今浏览器中运行的内容。

ECMAScript 第 5 版已于 2009 年 12 月完成, 所有主要浏览器(Chrome、Safari、Firefox 和 IE)的最新版本 已实施第 5 版。

5.1 版已于 2011 年 6 月完成。

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

ES2015 是 ECMAScript 的一个版本(新版本/未来版本)。

官方应该使用名称 ES2015 而不是 ES6。

ES6 将解决许多核心语言缺陷 TypeScript 和 CoffeeScript。

ES6 是 JavaScript 的下一次迭代,但它无法在当今的浏览器中运行。

有很多转译器会导出 ES5 以在浏览器中运行。

BabelJS:

BabelJS 是将新 JavaScript ES6 转换为旧 JavaScript ES5 的最流行的转译器。

BabelJS 使今天编写下一代 JavaScript(即 ES2015)成为可能。

BabelJS 只需将 ES2015 文件转换为 ES5 文件。

当前浏览器版本现在可以理解新的 JavaScript 代码 (ES2015),即使它们还不支持它。

TypeScript 和 CoffeeScript:

两者都在 ES5 之上提供语法糖 然后被转编译成 ES5 兼容的 JavaScript。

您编写 TypeScript 或 CoffeeScript,然后转译器将其转换为 ES5 JavaScript。

【讨论】:

"Javascript 还具有 ECMA 规范/标准中没有的其他附加功能" 您能否举一些这些功能的示例? 对于我的问题,我试图指出答案措辞中的潜在错误。使用了“实施”一词。 JavaScript 被称为“最流行的实现”。实现是“技术规范的实现”。翻译成软件。那么我想知道这个叫做“JavaScript”的软件在哪里。 @bzeaman - 这感觉像是在挑剔。这可能是实现的行话定义,但通俗地说,它适合这里。不过,请提出一个更合适的术语。 @Corrodias 我同意这感觉像是在挑剔,但我认为当答案是关于定义事物时这样做是明智的。 JavaScript 是一种语言,现在由 ECMAscript 标准化,类似于 C 是一种由 ISO 标准标准化的语言。 JavaScript 的术语将只是“语言”,仅此而已。 ES5、ES2015 和 BabelJS 的总结确实消除了人们从服务器端编程进入当今 JS 脚本世界时可能遇到的许多困惑。很好的答案。 +1【参考方案4】:

JavaScript = ECMAScript + DOM + BOM;

ECMAScript® 语言规范定义了用于创建和编辑对象、数组、数字等的所有逻辑......

DOM (Document Object Model) 可以与 html/XML 文档进行通信(例如 @987654326 @)。

BOM (Browser Object Model) 是浏览器对象的层次结构(例如位置对象、历史对象、表单元素)。

JavaScript 命名历史:

Mocha ► LiveScript ► JavaScript ►(部分 JS 产生)ECMA-262 ► ECMAScript ► JavaScript(由 ECMAScript + DOM + BOM 组成)

【讨论】:

那么 node.js 中的不是 JavaScript 吗?因为它没有 DOM API。 没错。 "Node.js 是针对现代版本的 V8 构建的。" & "V8 实现了 ECMA-262 第 5 版中指定的 ECMAScript..." & "然而,DOM 通常不是由 JavaScript 引擎提供,而是由浏览器提供。V8 也是如此——Google Chrome 提供 DOM。”(来源:nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction)跨度> @jerone 当我编写 JavaScript 代码时,我使用的是什么版本的 ECMAScript?它是否因浏览器或库而异? 可以参考JavaScript = ECMAScript + DOM API;吗? @koray-tugay 除了这里,没有太多关于 JavaScript 到底是什么的文档。我想这就是为什么这个问题如此受欢迎的原因。 “公式”JavaScript = ECMAScript + DOM API; 只是基于 JavaScript 所包含的总体商定的文档条款。【参考方案5】:

从技术上讲,ECMAScript 是每个人都在使用和实现的语言——它是多年前 Netscape 和 Microsoft 坐下来尝试标准化 JavaScript(Netscape 的脚本语言)和 JScript(Microsoft 的)之间的脚本时创建的规范。

随后,所有这些引擎表面上都在实现 ECMAScript,但是 JavaScript(名称)现在由于传统命名原因以及 Mozilla 的各种非标准扩展(他们希望能够真正实现“版本”)

【讨论】:

网景和微软居然相处过一次?! 我以为 Brandon 想在微软之前让 JS 成为标准,而他唯一能找到的就是 ECMA。【参考方案6】:

什么是 ECMAScript,即 ES?

ECMAScript 是脚本语言的标准, Javascript 语言基于 ECMAScript 标准。

Javascript 和 ECMAScript 完全一样吗?

不,Javascript 并不完全等同于 ECMAScript。 Javascript 的核心功能基于 ECMAScript 标准,但 Javascript 还具有其他不在 ECMA 规范/标准中的附加功能。

JavaScript = ECMAScript + DOM API;

DOM API 像:document.getElementById('id');

其他语言是否使用 ECMAScript 标准?

是的,除了 JavaScript 之外,还有其他语言也将 ECMAScript 标准作为其核心。 ActionScript(由 Adob​​e Flash 使用)和 JScript(由 Microsoft 使用)都是实现 ECMAScript 标准的语言。

为什么叫 ECMAScript?

Javascript 最初是在 Netscape 中创建的,他们希望将语言标准化。因此,他们将该语言提交给E欧洲C计算机M制造商A协会(ECMA)进行标准化。 但是,Javascript 名称存在商标问题,该标准被称为 ECMAScript,这也是它今天的名称。 由于商标问题,微软的语言版本被称为 JScript——尽管 JScript 的核心是与 Javascript 相同的语言。

【讨论】:

有关于plain JS和ES6 JS的课程。我们应该拿哪一个? ES6 在专业环境中使用得更多吗?谢谢。【参考方案7】:

各种 JavaScript 版本都是 ECMAScript 标准的实现。

【讨论】:

【参考方案8】:

在我的理解中,ECMAScript 是“理论”或“规范”,Javascript 是“实践”或“实施”。

【讨论】:

【参考方案9】:

我知道这是一篇旧帖子,但希望这会对某人有所帮助。

在 1990 年代不同版本的 js 开始出现,比如 netscape 的 javascript, 来自微软的 Js 脚本。因此 ecmascript 作为标准被引入。但是 ecmascript 只是 javascript 的一部分,它指定了它的核心语法、类型、对象等。这可能解释了 javascript 跨 diff 的不一致实现。浏览器

参考 - Wrox(面向 Web 开发人员的专业 Javascript)

【讨论】:

【参考方案10】:

JavaScript 是一种 ECMAScript 语言。

ECMAScript 不一定是 JavaScript。

【讨论】:

【参考方案11】:

现有的答案很好地解释了要点。

主要的一点是 ECMAScript 是纯粹的抽象语言,没有任何特定领域的扩展,它本身是没有用的。 specification 仅定义语言及其核心对象。

虽然 JavaScript 和 ActionScript 以及其他方言将特定领域的库添加到其中,但您可以将其用于有意义的事情。

ECMAScript engines 有很多,其中一些是开源的,另一些是专有的。您可以将它们链接到您的程序中,然后将您的本机函数添加到全局对象中,这样您的程序就可以编写脚本了。尽管它们最常用于浏览器。

【讨论】:

【参考方案12】:

Javascript 是最初的名称,旨在利用 java 的流行。 ECMA 是监督最终实施的标准的标准机构,因此名称大致相同。

实现有其他名称,如 V8 或 Rhino 等。

【讨论】:

【参考方案13】:

ECMAScriptJavaScript 的标准,请看来自 MDN 的这些声明:

JavaScript

JavaScript (JS) 是一种轻量级的解释型或 JIT 编译型 具有一流功能的编程语言。虽然它是最 众所周知的网页脚本语言,许多非浏览器 环境也使用它,例如 node.js、Apache CouchDB 和 Adob​​e 杂技演员。 JavaScript 是基于原型的、多范式的、动态的 语言,支持面向对象、命令式和声明式 (例如函数式编程)风格。阅读有关 JavaScript 的更多信息。


ECMAScript

JavaScript 的标准是 ECMAScript。截至 2012 年,所有现代 浏览器完全支持 ECMAScript 5.1。旧版浏览器至少支持 ECMAScript 3. 2015 年 6 月 17 日,ECMA International 发布了第六版 ECMAScript 的主要版本,正式名称为 ECMAScript 2015 年,最初被称为 ECMAScript 6 或 ES6。自从 然后,ECMAScript 标准按年发布周期。这 文档是指最新的草稿版本,目前是 ECMAScript 2018。

欲了解更多信息,请访问here

【讨论】:

【参考方案14】:

这是我的发现:

JavaScript: The Definitive Guide,由 David Flanagan 撰写,提供了非常简洁的解释:

JavaScript 是在 Web 的早期由 Netscape 创建的,并且 从技术上讲,“JavaScript”是 Sun 许可的商标 Microsystems(现为 Oracle)用于描述 Netscape(现为 Mozilla)的 语言的实现。 Netscape 提交的语言为 ECMA 的标准化以及由于商标问题, 该语言的标准化版本被这个尴尬的名字所困扰 “ECMA 脚本”。出于同样的商标原因,微软的版本 该语言的正式名称为“JScript”。在实践中,大约 每个人都将语言称为 JavaScript。

微软的blog post 似乎同意弗拉纳根所说的解释......

ECMAScript 是我们大家都知道的 JavaScript 语言的正式名称 知道和爱。

.. 这让我认为this 参考帖子中所有出现的JavaScript(再次由微软)都必须替换为ECMASCript。他们实际上似乎只在this 中使用ECMAScript,这是更新和更多技术文档页面。

w3schools.com 似乎同意上面的定义:

JavaScript 由 Brendan Eich 于 1995 年发明,并成为 ECMA 1997 年标准。ECMA-262 是该标准的正式名称。 ECMAScript 是该语言的正式名称。

这里的关键是:语言的正式名称

如果查看Mozilla 's JavaScript version pages,会遇到如下语句:

已弃用。语言的显式版本控制和选择加入 功能是 Mozilla 特有的,正在被删除。 Firefox 4 是最后一个引用 JavaScript 版本的版本 (1.8.5)。随着新的 ECMA 标准,JavaScript 语言功能现在 在 ECMA-262 版本中经常提到它们的初始定义 比如 ECMAScript 2015。

当您看到最近的发行说明时,您总会看到对 ECMAScript 标准的引用,例如:

已实现 ES2015 Symbol.toStringTag 属性(错误 1114580)。

ES2015 TypedArray.prototype.toString() 和 TypedArray.prototype.toLocaleString() 方法已经实现 (错误 1121938)。

Mozilla Web Docs 也有一个page,解释了 ECMAScript 和 JavaScript 之间的区别:

但是,在网络浏览器中理解的总称“JavaScript” context 包含几个非常不同的元素。其中之一是 核心语言(ECMAScript),另一种是 Web API 的集合, 包括 DOM(文档对象模型)。

结论

据我了解,人们使用 JavaScript 一词来指代核心的 ECMAScript 规范有些宽泛。

我想说,所有现代 JavaScript 实现(或 JavaScript 引擎)实际上都是 ECMAScript 实现。查看来自 Google 的 V8 Engine 的定义,例如:

V8 是 Google 的开源高性能 JavaScript 引擎,编写 使用 C++ 并在 Google Chrome(Google 的开源浏览器)中使用, 在 Node.js 等中。它实现了 ECMAScript 中指定的 ECMA-262。

他们似乎可以互换使用 JavaScript 和 ECMAScript 这个词,我会说它实际上是一个 ECMAScript 引擎?

因此,大多数 JavaScript 引擎实际上都在实现 ECMAScript 标准,但它们不称它们为 ECMAScript 引擎,而是称自己为 JavaScript 引擎。 This的回答也支持我看情况的方式。

【讨论】:

【参考方案15】:

如果不是因为“JavaScript”这个名称归 Sun 拥有,我怀疑我们是否会使用“ECMAScript”这个词。出于所有意图和目的,该语言是 JavaScript。你不会去书店找 ECMAScript 书吧?

说“JavaScript”是实现有点太简单了。 JScript 是微软的实现。

【讨论】:

我对 ECMAscript 这个词没有意见...你有没有想过用 MPEG 代替视频很奇怪? 哈哈。不是 Brendan Eich 说 ECMAScript 听起来像皮肤病吗? :-) Sun 拥有 Java 这个词,而不是 JavaScript。 @JamesR.Clayton JavaScript 是在 Web 的早期由 Netscape 创建的,从技术上讲,“JavaScript”是 Sun Microsystems(现为 Oracle)授权用于描述 Netscape(现为 Mozilla)的商标语言的实现。【参考方案16】:

JavaScript 是围绕 ECMAScript 标准形成的语言分支之一。我相信 ECMA 是欧洲计算机制造商协会,并不是说这真的相关或什么的。

不要忘记围绕 ECMA 脚本标准形成的另一种流行语言是 ActionScript,用于 Adob​​e Flash/Flex。

【讨论】:

以上是关于JavaScript 和 ECMAScript 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript ES6 特性概述(即ECMAScript 6和ES2015+)

JavaScript第三章

谈谈神秘的ES6——初识ECMAScript

Javascript (ECMAScript5) 的细节和违反直觉的地方

Javascript (ECMAScript5) 的细节和违反直觉的地方

ECMAScript和JavaScript的区别