JavaScript和ECMAScript有什么区别?


462

ECMAScript和JavaScript有什么区别?根据我的推论,ECMAScript是标准,JavaScript是实现。它是否正确?

Answers:


183

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


9
真正好的是在JavaScript和ECMAScript版本之间建立清晰的映射,例如ES5对应于JS1.5等。啊,我发现了它:en.wikipedia.org/wiki/JavaScript#Versions
Sam Joseph

2
@Sam -萨姆的链接的更新:en.wikipedia.org/wiki/JavaScript#Version_history
罗普

65
不赞成和不赞成杨莉的,因为这个回答很少说,基本上把您指向了维基百科。杨力的答案更为详尽和有用。而且,根据我的理解,是一种语言/标准,另一种是方言,还是实现等等,都是可以接受的,而不是事实。鉴于此答案似乎是事实。如果我错了,请纠正我。实际上,我会争辩说,这个答案的建议甚至不是普遍的共识。如大多数人所见,ECMAScript具有标准语言和JavaScript语言。
redfox05 2015年


5
我不同意。ECMAScript是规范。JS,JScript,ActionScript是实现此类规范的语言。
adripanico

611

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

JavaScript最初称为Mocha,后来更改为Livescript,但最终成为JavaScript。

请务必注意,JavaScript早于ECMAscript,历史记录会告诉您原因。

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

然而,Eich认为Java的所有规则都过于复杂,因此着手创建一种甚至初学者也可以编写代码的简单语言。这在诸如放宽对分号的要求等方面很明显。

语言完成后,Netscape的营销团队要求Sun允许他们将JavaScript命名为营销特技,因此为什么大多数从未使用过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获得了很大的发展动力,并计划从现在开始的几个月内发布其第六版,这是迄今为止的最大变化。

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

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

还有其他实现ECMAScript的引人注目的语言,例如ActionScript(用于Flash)


1
如果您对如何将新的ES2015标准编译/转换为ECMAScript 5代码感兴趣,则可以在babeljs.io或github.com/google/traceur-compiler上的traceur中查看Babel(以前为6to5)。有了这些可用的工具,您就没有理由立即开始编写“新JavaScript”并充分利用该语言的所有最新功能。
LWurm

1
我不知道Lua实现了ECMAScript。我似乎找不到能证实这一点的东西。你的来源是什么?
battmanz

2
@YangLi您是否同意jerone的以下回答,即ECMAScript语言不包括我们在编写纯JavaScript时都会使用的DOM API?
theJollySin

11
@theJollySin是的,他是正确的。ECMAScript不是专门为浏览器设计的,因此诸如document.getElementById之类的方法和其他DOM API都不是该标准的一部分。它们属于WHATWG标准,以及其他一些特定于浏览器的方法(如localStorage等)。如果您采用节点并且不使用任何导入的模块,则您只有ECMAScript API。
杨力

1
多种语言如何实现相同的标准而不是相同的语言?该标准定义了语言。如果某种语言实现了C ++标准,则称它为C ++,而不是别的(正是因为它实现了该标准)。所以我仍然有同样的问题...有什么区别?
Neme,

157

ECMAScript = ES:

  • ECMAScript是脚本语言的标准。

  • 像Javascript这样的语言都基于ECMAScript标准。

  • ECMA Standard基于多种原始技术,其中最著名的是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。


3
Javascript还具有ECMA规范/标准中未包含的其他附加功能 ”您能否举例说明这些功能?
Aruna Herath

1
JavaScript是ECMAScript标准的最流行的实现。 ”那么,在哪里可以找到这种实现的源,称为“ JavaScript”?
bzeaman '17

7
关于我的问题,我试图指出答案措词中的潜在错误。使用“实施”一词。据说JavaScript是“最受欢迎的实现 ”。实现是“ 技术规范的实现 ”。转化为软件。因此,我想知道这个叫做“ JavaScript”的软件在哪里。
bzeaman

4
@Corrodias我同意感觉就像是在捡东西,但是当答案是关于定义事物时,我认为这样做是明智的。JavaScript是一种如今由ECMAscript标准化的语言,与C是由ISO标准标准化的语言相当。JavaScript的术语就只是“语言”,仅此而已。
bzeaman

4
ES5,ES2015和BabelJS的摘要确实消除了人们从服务器端编程进入当今JS脚本世界时可能产生的诸多困惑。好答案。+1
RBT

45

JavaScript = ECMAScript + DOM + BOM

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

  • DOM(d ocument ö bject 中号 Odel等)使得能够使用HTML / XML文档(例如通信document.getElementById('id');)。

  • BOM( rowser ö bject 中号 Odel等)是浏览器对象(例如位置对象,历史对象,表格元件)的层次结构。

JavaScript命名历史:

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


7
那么,node.js中的内容不是JavaScript吗?因为它没有DOM API。
Aruna Herath

4
没错 “ Node.js是针对现代版本的V8构建的。” “ V8实现了ECMA-262,第5版中指定的ECMAScript ...”“但是DOM通常不是由JavaScript引擎提供,而是由浏览器提供。V8的情况也是如此-Google Chrome提供了DOM。” (来源:nodejs.org/en/docs/es6github.com/v8/v8/wiki/Introduction
jerone

7
@jerone 编写JavaScript代码时使用什么版本的ECMAScript?它随浏览器或库的不同而不同吗?
theJollySin

4
你能参考一下JavaScript = ECMAScript + DOM API;吗?
Koray Tugay,

2
@ koray-tugay除了这里,没有多少关于JavaScript到底是什么的文档。我想这就是为什么这个问题如此受欢迎的原因。“公式” JavaScript = ECMAScript + DOM API;仅基于JavaScript所组成的全部商定的书面术语。
jerone

42

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

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


12
Netscape和Microsoft实际上相处了一次?
科尔·约翰逊

2
我以为Brandon想要使JS成为Microsoft之前的标准,而他唯一能找到的就是ECMA。
乔·西蒙斯

30

什么是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上创建的,他们希望对语言进行标准化。因此,他们提出的语言给Ë年欧洲Ç动态数值中号 anufacturer的一个 ssociation(ECMA)进行标准化。
  • 但是,名称Javascript出现商标问题,该标准也被称为ECMAScript,这也是今天的名称。
  • 由于商标问题,Microsoft的语言版本称为JScript,尽管JScript的核心与Javascript相同。

有关于纯JS和ES6 JS的课程。我们应该选哪一个?ES6是否在专业设置中使用了更多?谢谢。
MasterJoe2

16

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


11

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

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

参考-Wrox(适用于Web开发人员的专业Javascript)


10

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



7

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

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

JavaScript,ActionScript和其他方言向其添加了特定于域的库,因此您可以将其用于有意义的事情。

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


5

Javascript是原始名称,旨在利用Java的流行性。ECMA是负责监督最终制定的标准的标准机构,因此名称大致相同。

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


3

ECMAScriptJavaScrip t 的标准,请查看MDN的以下语句:

在此处输入图片说明

的JavaScript

JavaScript(JS)是具有一流功能的轻量级解释型或JIT编译的编程语言。尽管它是最著名的网页脚本语言,但许多非浏览器环境也使用它,例如node.js,Apache CouchDB和Adobe Acrobat。JavaScript是一种基于原型的,多范式的动态语言,支持面向对象,命令式和声明式(例如,函数式编程)样式。了解有关JavaScript的更多信息。


ECMAScript

JavaScript的标准是ECMAScript。截至2012年,所有现代浏览器均完全支持ECMAScript 5.1。较旧的浏览器至少支持ECMAScript3。2015年6月17日,ECMA International发布了ECMAScript的第六个主要版本,正式称为ECMAScript 2015,最初被称为ECMAScript 6或ES6。从那时起,ECMAScript标准每年发布一次。本文档引用了最新的草稿版本,当前为ECMAScript 2018。

欲了解更多信息,请访问这里


3

这是我的发现:

JavaScript: David Flanagan编写的权威指南提供了非常简洁的解释:

JavaScript是在Web早期由Netscape创建的,从技术上讲,“ JavaScript”是Sun Microsystems(现为Oracle)许可的商标,用于描述Netscape(现为Mozilla)的语言实现。Netscape向ECMA提交了用于标准化的语言,由于商标问题,该语言的标准化版本使用了笨拙的名称“ ECMAScript”。出于相同的商标原因,该语言的Microsoft版本正式称为“ JScript”。实际上,几乎每个人都将Java语言称为JavaScript。

微软的博客文章似乎同意弗拉纳根的说法。

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

..这让我想到了所有出现JavaScript(再次微软)基准柱必须被替换ECMASCript。实际上,他们似乎ECMAScript只在,更新和更多技术文档页面中使用时要小心。

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

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

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

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

不推荐使用。语言功能的显式版本控制和选择加入是特定于Mozilla的,并且正在被删除。Firefox 4是最后一个引用JavaScript版本(1.8.5)的版本。有了新的ECMA标准,现在在ECMA-262版(例如ECMAScript 2015)中经常提到JavaScript语言功能及其初始定义。

当您看到最新的发行说明时,将始终看到对ECMAScript标准的引用,例如:

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

  • ES2015 TypedArray.prototype.toString()和TypedArray.prototype.toLocaleString()方法已实现(错误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引擎。这个答案也支持我看情况的方式。


2

我怀疑我们是否曾经使用过“ ECMAScript”一词,如果不是因为名称“ JavaScript”归Sun所有。出于所有目的和目的,该语言是JavaScript。您不去书店寻找ECMAScript书籍,对吗?

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


1
我对ECMAscript一词没问题...您是否曾经想过说使用MPEG而不是视频是很奇怪的?
ryansstack

7
哈哈。布伦丹·艾希(Brendan Eich)说ECMAScript听起来像是皮肤病吗?:-)
诺斯雷德纳2009年

7
Sun拥有Java一词,而不是JavaScript。
James R. Clayton

1
@ JamesR.Clayton JavaScript是在Web早期由Netscape创建的,从技术上讲,“ JavaScript”是Sun Microsystems(现为Oracle)许可的商标,用于描述Netscape(现为Mozilla)的语言实现。
Koray Tugay

1

JavaScript是围绕ECMAScript标准形成的一种语言分支。我相信ECMA是欧洲计算机制造商协会,而不是真的有用或没有其他意义。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.