【发布时间】:2010-10-29 02:07:31
【问题描述】:
ECMAScript 和 JavaScript 有什么区别?根据我的推断,ECMAScript 是标准,JavaScript 是实现。这是正确的吗?
【问题讨论】:
标签: javascript ecma262
ECMAScript 和 JavaScript 有什么区别?根据我的推断,ECMAScript 是标准,JavaScript 是实现。这是正确的吗?
【问题讨论】:
标签: javascript ecma262
我认为应该上一点历史课。
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)
【讨论】:
ECMAScript 是一种语言,而 JavaScript、JScript 甚至 ActionScript 3 都被称为“方言”。 Wikipedia 对此有所了解。
【讨论】:
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 = 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 组成)
【讨论】:
JavaScript = ECMAScript + DOM API;吗?
JavaScript = ECMAScript + DOM API; 只是基于 JavaScript 所包含的总体商定的文档条款。
从技术上讲,ECMAScript 是每个人都在使用和实现的语言——它是多年前 Netscape 和 Microsoft 坐下来尝试标准化 JavaScript(Netscape 的脚本语言)和 JScript(Microsoft 的)之间的脚本时创建的规范。
随后,所有这些引擎表面上都在实现 ECMAScript,但是 JavaScript(名称)现在由于传统命名原因以及 Mozilla 的各种非标准扩展(他们希望能够真正实现“版本”)
【讨论】:
什么是 ECMAScript,即 ES?
ECMAScript 是脚本语言的标准, Javascript 语言基于 ECMAScript 标准。
Javascript 和 ECMAScript 完全一样吗?
JavaScript = ECMAScript + DOM API;
DOM API 像:document.getElementById('id');
其他语言是否使用 ECMAScript 标准?
为什么叫 ECMAScript?
【讨论】:
各种 JavaScript 版本都是 ECMAScript 标准的实现。
【讨论】:
在我的理解中,ECMAScript 是“理论”或“规范”,Javascript 是“实践”或“实施”。
【讨论】:
我知道这是一篇旧帖子,但希望这会对某人有所帮助。
在 1990 年代不同版本的 js 开始出现,比如 netscape 的 javascript, 来自微软的 Js 脚本。因此 ecmascript 作为标准被引入。但是 ecmascript 只是 javascript 的一部分,它指定了它的核心语法、类型、对象等。这可能解释了 javascript 跨 diff 的不一致实现。浏览器
参考 - Wrox(面向 Web 开发人员的专业 Javascript)
【讨论】:
JavaScript 是一种 ECMAScript 语言。
ECMAScript 不一定是 JavaScript。
【讨论】:
现有的答案很好地解释了要点。
主要的一点是 ECMAScript 是纯粹的抽象语言,没有任何特定领域的扩展,它本身是没有用的。 specification 仅定义语言及其核心对象。
虽然 JavaScript 和 ActionScript 以及其他方言将特定领域的库添加到其中,但您可以将其用于有意义的事情。
ECMAScript engines 有很多,其中一些是开源的,另一些是专有的。您可以将它们链接到您的程序中,然后将您的本机函数添加到全局对象中,这样您的程序就可以编写脚本了。尽管它们最常用于浏览器。
【讨论】:
Javascript 是最初的名称,旨在利用 java 的流行。 ECMA 是监督最终实施的标准的标准机构,因此名称大致相同。
实现有其他名称,如 V8 或 Rhino 等。
【讨论】:
ECMAScript 是 JavaScript 的标准,请看来自 MDN 的这些声明:
JavaScript (JS) 是一种轻量级的解释型或 JIT 编译型 具有一流功能的编程语言。虽然它是最 众所周知的网页脚本语言,许多非浏览器 环境也使用它,例如 node.js、Apache CouchDB 和 Adobe 杂技演员。 JavaScript 是基于原型的、多范式的、动态的 语言,支持面向对象、命令式和声明式 (例如函数式编程)风格。阅读有关 JavaScript 的更多信息。
JavaScript 的标准是 ECMAScript。截至 2012 年,所有现代 浏览器完全支持 ECMAScript 5.1。旧版浏览器至少支持 ECMAScript 3. 2015 年 6 月 17 日,ECMA International 发布了第六版 ECMAScript 的主要版本,正式名称为 ECMAScript 2015 年,最初被称为 ECMAScript 6 或 ES6。自从 然后,ECMAScript 标准按年发布周期。这 文档是指最新的草稿版本,目前是 ECMAScript 2018。
欲了解更多信息,请访问here
【讨论】:
这是我的发现:
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的回答也支持我看情况的方式。
【讨论】:
如果不是因为“JavaScript”这个名称归 Sun 拥有,我怀疑我们是否会使用“ECMAScript”这个词。出于所有意图和目的,该语言是 JavaScript。你不会去书店找 ECMAScript 书吧?
说“JavaScript”是实现有点太简单了。 JScript 是微软的实现。
【讨论】:
JavaScript 是围绕 ECMAScript 标准形成的语言分支之一。我相信 ECMA 是欧洲计算机制造商协会,并不是说这真的相关或什么的。
不要忘记围绕 ECMA 脚本标准形成的另一种流行语言是 ActionScript,用于 Adobe Flash/Flex。
【讨论】: