JavaScript和ECMAScript有什么区别?

Guy*_*Guy 455 javascript ecma262

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

Yan*_* Li 588

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

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

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

从一开始,JavaScript就从Java派生出它的名字,最初Brendan Eich(JS的创建者)被要求为Netscape开发一种类似Java的Web语言.

然而,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版,其中迄今为止发生了最大的变化.

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

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

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

  • @theJollySin是的,他是对的.ECMAScript不是专为浏览器设计的,因此document.getElementById和其他DOM API等方法不属于标准.它们属于WHATWG标准,以及一些其他浏览器特定的方法,如localStorage等.如果您使用node并且不使用任何导入的模块,那么您只有ECMAScript API. (9认同)
  • 多种语言如何实现相同的标准而不是同一种语言?标准*定义*语言。如果某种语言实现了 C++ 标准,则称为 C++,而不是其他语言(正是*因为*它实现了该标准)。所以我仍然有同样的问题......有什么区别? (3认同)
  • @YangLi你是否同意以下jerone的回答,即ECMAScript语言不包括我们在编写纯JavaScript时使用的DOM API? (2认同)

Rya*_*nce 183

ECMAScript是语言,而JavaScript,JScript甚至ActionScript 3都被称为"方言".维基百科对此有所了解.

  • 倾向并赞成杨莉的,因为这个答案很少,基本上指向维基百科.杨力的答案更加详细和有用.此外,根据我的理解,一个人是语言/标准还是其他方言或实施等是开放的意见,而不是事实.虽然这个答案使它看起来是事实.如果我错了,请纠正我.事实上,我认为这个答案的建议甚至不是普遍的共识.大多数人都认为ECMAScript有标准和JavaScript作为语言. (60认同)
  • 什么是非常好的是JavaScript和ECMAScript版本之间的清晰映射,例如ES5对应于JS1.5等啊我发现它:http://en.wikipedia.org/wiki/JavaScript#Versions (9认同)
  • 我不同意.ECMAScript是规范.JS,JScript,ActionScript是实现此类规范的语言. (3认同)
  • @Sam-更新Sam的链接:https://en.wikipedia.org/wiki/JavaScript#Version_history (2认同)
  • @Rop - 更新到该链接:https://en.wikipedia.org/wiki/ECMAScript#Version_correspondence (2认同)

Mah*_*alt 151

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被认为是"最受欢迎的**实现**".实现是"技术规范的**实现**".这转换成**软件**.那么我想知道这个名为'JavaScript'的软件在哪里. (4认同)
  • @Corrodias我会同意这种感觉就像挑选一样,但我认为当答案是关于定义事物时这样做是明智的.JavaScript是一种语言,现在由ECMAscript标准化,类似于C语言是如何通过ISO标准标准化的.JavaScript的术语就是"语言",仅此而已. (4认同)
  • ES5,ES2015和BabelJS的摘要确实清除了当他从服务器端编程登陆今天的JS脚本世界时可能遇到的许多混淆.很好的答案.+1 (4认同)
  • "*Javascript还有其他不属于ECMA规范/标准的附加功能*"您能否举例说明这些功能? (3认同)
  • @bzeaman - 这感觉就像挑剔。这可能是实现的行话定义,但通俗地说,它适合这里。不过,请提出一个更合适的术语。 (2认同)
  • `JavaScript = ECMAScript + DOM API;`。这是否意味着“服务器端 JS = ECMAScript”?@Corrodias 你说的对吗? (2认同)

oll*_*iej 42

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

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

  • Netscape和微软实际上曾经_with一次?! (12认同)
  • 我认为Brandon希望在微软之前将JS作为标准,而他唯一能找到的就是ECMA. (2认同)

jer*_*one 38

JavaScript = ECMAScript + DOM API ;

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

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

JavaScript命名历史:

摩卡►LiveScript►JavaScript►(JS的一部分产生)ECMA-262►ECMAScript►JavaScript(由ECMAScript + DOM API组成)

  • @jerone当我编写JavaScript代码时,我使用的是什么*版本的ECMAScript?它是否因浏览器或库而异? (6认同)
  • 可以参考一下`JavaScript = ECMAScript + DOM API;`吗? (5认同)
  • 那么node.js中的内容不是JavaScript?因为它没有DOM API. (4认同)
  • 那是对的._"Node.js是针对V8的现代版本构建的."_&_"V8实现了ECMA-262,第5版中指定的ECMAScript ......"_&_"然而,DOM通常不是由JavaScript提供的引擎而不是浏览器.V8也是如此 - 谷歌Chrome提供了DOM."_(来源:https://nodejs.org/en/docs/es6/&https://github.com/v8/ V8 /维基/简介) (4认同)
  • @koray-tugay 除了这里,关于 JavaScript 究竟是什么的文档并不多。我想这就是这个问题如此受欢迎的原因。“公式”`JavaScript = ECMAScript + DOM API;` 只是基于 JavaScript 所包含的整体商定的文档术语。 (2认同)

Imr*_*ran 28

什么是ECMAScript即ES?

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

Javascript与ECMAScript完全相同吗?

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

JavaScript = ECMAScript + DOM API;

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

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

  • 是的,有[JavaScript] [2]以外的语言也将ECMAScript标准作为核心.
  • [ActionScript] [3](由Adobe Flash使用)和[JScript] [4](由Microsoft使用)都是实现ECMAScript标准的语言.

为什么叫做ECMAScript?

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


小智 16

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


dep*_*123 11

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

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

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


Ret*_*hna 11

根据我的理解,ECMAScript是"理论"或"规范",Javascript是"实用"或"实现".


rya*_*ack 10

JavaScript 是一种 ECMAScript语言.

ECMAScript 不一定是 JavaScript.


Ali*_*eza 9

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

在此输入图像描述

JavaScript

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


ECMA脚本

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

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


Cal*_*ius 7

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

重点是ECMAScript是一种简单的抽象语言,没有任何特定于域的扩展,它本身就没用了.该规范只定义了语言和它的核心对象.

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

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


Jer*_*amp 5

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

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


Kor*_*gay 5

以下是我的发现:

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

JavaScript 是在 Web 的早期由 Netscape 创建的,从技术上讲,“JavaScript”是 Sun Microsystems(现为 Oracle)许可的商标,用于描述 Netscape(现为 Mozilla)对该语言的实现。Netscape 向 ECMA 提交了标准化语言,但由于商标问题,该语言的标准化版本被困在尴尬的名称“ECMAScript”上。出于相同的商标原因,Microsoft 版本的语言正式称为“JScript”。在实践中,几乎每个人都称这种语言为 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 标准中,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 实现。查看谷歌对V8 引擎的定义,例如:

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

他们似乎交替使用 JavaScript 和 ECMAScript 一词,我会说它实际上是一个 ECMAScript 引擎吗?

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