520

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

4

16 回答 16

675

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

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)

于 2015-05-07T23:13:07.680 回答
195

ECMAScript 是语言,而 JavaScript、JScript 甚至 ActionScript 3 被称为“方言”。维基百科对此有所了解。

于 2009-05-26T22:21:34.850 回答
181

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 是将新的 JavaScript ES6 转换为旧的 JavaScript ES5 的最流行的转译器。

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

  • BabelJS 简单地将 ES2015 文件转换为 ES5 文件。

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

TypeScript 和 CoffeeScript:

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

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

于 2015-11-17T03:00:01.883 回答
64

JavaScript = ECMAScript + DOM + BOM

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

  • DOM(文档对象模型使得与 HTML/XML 文档(例如 )进行通信成为可能document.getElementById('id');

  • BOM(B rowser Object M模型)是浏览器对象的层次结构(例如位置对象、历史对象、表单元素)。

JavaScript 命名的历史:

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

于 2015-04-27T13:34:58.537 回答
44

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

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

于 2009-05-26T22:08:06.500 回答
31

什么是 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 创建的,他们希望将语言标准化。因此,他们将该语言提交给欧洲计算机制造商协会( ECMA )进行标准化。
  • 但是,Javascript 的名称存在商标问题,该标准被称为 ECMAScript,这也是它今天的名称。
  • 由于商标问题,微软的语言版本被称为 JScript——尽管 JScript 的核心是与 Javascript 相同的语言。
于 2016-06-06T14:23:11.950 回答
17

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

于 2009-05-26T20:18:41.620 回答
12

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

于 2013-12-18T17:19:51.327 回答
11

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

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

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

于 2012-11-09T21:29:04.087 回答
10

JavaScript是一种ECMAScript 语言。

ECMAScript不一定是JavaScript。

于 2009-05-26T20:45:32.627 回答
8

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

要点是 ECMAScript 是一种纯粹的抽象语言,没有任何特定领域的扩展,它本身是无用的。规范只定义了语言和它的核心对象。

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

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

于 2015-04-08T17:56:03.567 回答
5

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

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

于 2009-05-26T20:15:42.610 回答
5

ECMAScriptJavaScrip t 的标准,请查看MDN中的这些语句:

在此处输入图像描述

JavaScript

JavaScript (JS)是一种轻量级的解释型或 JIT 编译型编程语言,具有一流的功能。虽然它是最著名的网页脚本语言,但许多非浏览器环境也使用它,例如 node.js、Apache CouchDB 和 Adob​​e Acrobat。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。

欲了解更多信息,请访问此处

于 2017-06-05T13:06:39.297 回答
5

以下是我的发现:

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

JavaScript 是在 Web 早期由 Netscape 创建的,从技术上讲,“JavaScript”是 Sun Microsystems(现为 Oracle)许可的商标,用于描述 Netscape(现为 Mozilla)对该语言的实现。Netscape 将该语言提交给 ECMA 进行标准化,但由于商标问题,该语言的标准化版本被困在了尴尬的名称“ECMAScript”上。出于同样的商标原因,微软的语言版本正式称为“JScript”。实际上,几乎每个人都将语言称为 JavaScript。

微软的一篇博文似乎同意弗拉纳根所说的解释。

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

..这让我认为这篇JavaScript参考文章中所有出现的(再次由微软)都必须替换为. 他们实际上似乎很小心只在这个、更新和更多技术文档页面中使用。ECMASCriptECMAScript

w3schools.com似乎同意上述定义:

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

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

如果你查看Mozilla 的 JavaScript 版本页面,你会遇到如下语句:

已弃用。语言功能的明确版本控制和选择加入是 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() 方法已经实现(bug 1121938)。

Mozilla Web Docs 还有一个页面解释了 ECMAScript 和 JavaScript 之间的区别:

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

结论

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

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

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

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

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

于 2018-05-11T21:20:47.463 回答
3

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

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

于 2009-05-26T20:42:57.250 回答
1

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

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

于 2009-05-26T22:21:34.163 回答