JavaScript和ECMAScript有什么区别?

时间:2009-05-26 20:13:31

标签: javascript ecma262

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

16 个答案:

答案 0 :(得分:555)

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

JavaScript最初被命名为Mocha并更改为Livescript但最终成为JavaScript。

重要的是要注意,JavaScript出现在ECMAscript之前,历史将告诉你原因。

从头开始,JavaScript从Java派生名称,最初Brendan Eich(JS的创建者)被要求为Netscape开发类似于Java的语言。

但是,Eich认为Java过于复杂,并且所有规则都很复杂,因此开始创建一种简单的语言,即使是初学者也可以编写。这在诸如放松需要分号这样的事情中很明显。

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

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

在Netscape失败之前,他们决定启动一个标准,指导JavaScript的路径,名为ECMAScript。

ECMAScript发布了一些版本,并在1999年发布了他们的最新版本(ECMAScript 3),然后才进入未来10年的休眠状态。在这10年中,微软主宰了这些场景,但同时他们没有改进他们的产品,因此Firefox诞生了(由Eich领导)以及其他一系列浏览器,如Chrome,Opera。

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

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

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

还有其他明显的语言可以实现ECMAScript,例如ActionScript(用于Flash)

答案 1 :(得分:178)

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

答案 2 :(得分:136)

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浏览器,火狐和IE) 已实施第5版。

  • 5.1版本在2011年6月,结束了。

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

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

  • 正式名称应使用ES2015代替ES6。

  • ES6将解决许多核心语言缺点在寻址 打字稿和CoffeeScript的。

  • ES6是JavaScript的下一次迭代,但它不能在今天的浏览器中运行。

  • 有相当多的转发器会导出ES5以便在浏览器中运行。

<强> BabelJS:

  • BabelJS是最受欢迎的转换器,它将新的JavaScript ES6转换为旧的JavaScript ES5。

  • BabelJS使得今天编写下一代JavaScript成为可能(意味着ES2015)。

  • BabelJS只需获取ES2015文件并将其转换为ES5文件。

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

<强>打字稿和CoffeeScript的:

  • 两者都在ES5之上提供语法糖 然后是transcompiled到ES5兼容的JavaScript。

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

答案 3 :(得分:42)

技术上ECMAScript是每个人都在使用和实现的语言 - 这是多年前Netscape和Microsoft坐下来并试图标准化JavaScript(Netscape的脚本语言)和JScript(Microsoft)之间脚本的规范。 / p>

随后所有这些引擎表面上都在实现ECMAScript,但是JavaScript(名称)现在因传统的命名原因而悬而未决,并且作为Mozilla的各种非标准扩展(他们希望能够实际实现)的营销术语“版本”)

答案 4 :(得分:33)

  

JavaScript = ECMAScript + DOM API;

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

  • DOM API可以与HTML / XML文档进行通信(例如document.getElementById('id');)。

JavaScript命名历史:

  

Mocha►LiveScript►JavaScript►(JS的一部分产生)ECMA-262►ECMAScript►JavaScript(包含ECMAScript + DOM API)

答案 5 :(得分:25)

什么是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(由Adobe Flash使用)和JScript(由Microsoft使用)都是实现ECMAScript标准的语言。

为什么称为ECMAScript?

  • Javascript最初是在Netscape创建的,他们想要标准化语言。因此,他们将语言提交给 E uropean C omputer M 制造商的 A 协会(ECMA)进行标准化。
  • 但是,有一个名为Javascript的商标问题,标准被称为ECMAScript,它也是今天的名称。
  • 由于商标问题,Microsoft的该语言版本称为JScript - 尽管JScript的核心是与Javascript相同的语言。

答案 6 :(得分:15)

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

答案 7 :(得分:11)

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

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

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

答案 8 :(得分:10)

根据我的理解,ECMAScript是“理论”或“规范”,Javascript是“实用”或“实施”。

答案 9 :(得分:9)

JavaScript 是一种 ECMAScript语言。

ECMAScript 不一定是 JavaScript。

答案 10 :(得分:7)

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

重点是ECMAScript是一种简单的抽象语言,没有任何特定于域的扩展,它本身就没用。 specification仅定义语言及其核心对象。

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

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

答案 11 :(得分:5)

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

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

答案 12 :(得分:3)

ECMAScript JavaScrip 的标准,请查看 MDN 中的这些声明:

enter image description here

的JavaScript

  

JavaScript(JS)是轻量级解释或JIT编译   具有一流功能的编程语言。虽然它是最多的   众所周知的网页脚本语言,很多非浏览器   环境也使用它,例如node.js,Apache CouchDB和Adobe   杂技演员。 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

答案 13 :(得分:2)

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

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

答案 14 :(得分:2)

以下是我的发现:

由David Flanagan撰写的

JavaScript: The Definitive Guide提供了一个非常简洁的解释:

  

JavaScript是在Web早期在Netscape创建的,并且   从技术上讲,&#34; JavaScript&#34;是Sun授权的商标   微系统(现为Oracle)用于描述Netscape的(现在是Mozilla&#39; s)   实施该语言。 Netscape提交了该语言   ECMA的标准化和由于商标问题,   语言的标准化版本被困在了尴尬的名字   &#34; ECMAScript的&#34 ;.出于同样的商标原因,微软的版本   该语言被正式称为&#34; JScript&#34;。在实践中,差不多   每个人都称之为JavaScript语言。

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

  

ECMAScript是我们所有人的JavaScript语言的官方名称   知道和爱。

..这让我觉得this参考帖子中的JavaScript所有出现的内容(再次由Microsoft发布)必须由ECMASCript替换。他们实际上似乎只在this,更近期和更多技术文档页面中使用ECMAScript时要小心。

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

  

JavaScript由Brendan Eich于1995年发明,并成为ECMA   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文档还有page,解释了ECMAScript和JavaScript之间的区别:

  

然而,总括性术语&#34; JavaScript&#34;如在Web浏览器中所理解的那样   context包含几个非常不同的元素。其中一个是   核心语言(ECMAScript),另一个是Web API的集合,   包括DOM(文档对象模型)。

<强>结论

据我所知,人们在某种程度上使用JavaScript这个词来引用核心ECMAScript规范。

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

  

V8是谷歌开源的高性能JavaScript引擎   在C ++中,用于Google Chrome的开源浏览器,   以及Node.js等。它按照中的规定实现ECMAScript   ECMA-262。

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

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

答案 15 :(得分:1)

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

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