JavaScript 和 ECMAScript 有什么区别?

IT技术 javascript ecma262
2021-01-25 10:39:53

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

6个回答

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

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

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

从一开始,JavaScript 的名字就来源于 Java,最初 Brendan Eich(JS 的创造者)被要求为 Netscape 开发一种类似于 Java 的 Web 语言。

然而,Eich 认为 Java 的所有规则都过于复杂,因此着手创建一种更简单的语言,即使是初学者也可以编写代码。这在诸如放宽分号需求之类的事情中很明显。

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

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

在 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)

对于那些有兴趣在如何编译/ transpile新ES2015标准降低到5的ECMAScript代码,你会想在退房巴贝尔(原6to5)提供babeljs.io在或traceur github.com/google/traceur-compiler有了这些可用的工具,您就没有理由不能立即开始编写“新 JavaScript”,并利用该语言的所有最新添加内容。
2021-03-17 10:39:53
@theJollySin 是的,他是对的。ECMAScript 不是专门为浏览器设计的,因此像 document.getElementById 和其他 DOM API 这样的方法不是标准的一部分。它们属于 WHATWG 标准,以及一些其他特定于浏览器的方法,如 localStorage 等。如果您使用 node 并且不使用任何导入的module,那么您将拥有仅 ECMAScript 的 API。
2021-03-23 10:39:53
多种语言如何实现相同的标准而不是同一种语言?该标准定义了语言。如果某种语言实现了 C++ 标准,则称为 C++,而不是其他语言(正是因为它实现了该标准)。所以我仍然有同样的问题......有什么区别?
2021-03-26 10:39:53
@YangLi 您是否同意下面 jerone 的回答,ECMAScript 语言不包括我们在编写纯 JavaScript 时都使用的 DOM API?
2021-03-28 10:39:53
我不知道 Lua 实现了 ECMAScript。我似乎找不到任何可以证实这一点的东西。你的来源是什么?
2021-04-07 10:39:53

ECMAScript 是一种语言,而 JavaScript、JScript 甚至 ActionScript 3 被称为“方言”。维基百科对此进行了一些说明。

2021-03-19 10:39:53
2021-03-26 10:39:53
真正好的是 JavaScript 和 ECMAScript 版本之间的清晰映射,例如 ES5 对应于 JS1.5 等等。啊我找到了:en.wikipedia.org/wiki/JavaScript#Versions
2021-03-29 10:39:53
我不同意。ECMAScript 是规范。JS、JScript、ActionScript 是实现此类规范的语言。
2021-03-30 10:39:53
对杨莉的投反对票和赞成票,因为这个答案说的很少,基本上是指向维基百科。杨丽的回答更加详细和有用。此外,根据我的理解,无论是语言/标准还是其他方言或实施等,都可以公开发表意见,而不是事实。而这个答案使它看起来是事实。如果我错了,请纠正我。事实上,我认为这个答案的建议甚至不是普遍的共识。正如大多数人看到的那样,ECMAScript 具有标准和 JavaScript 作为语言。
2021-04-05 10:39:53

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。

@bzeaman - 这感觉就像挑剔。这可能是实现的行话定义,但通俗地说,它适合这里。不过,请提出一个更合适的术语。
2021-03-14 10:39:53
@Corrodias 我同意这感觉就像挑剔,但我认为当答案是关于定义事物时这样做是明智的。JavaScript 是一种语言,现在由 ECMAscript 标准化,类似于 C 是一种由 ISO 标准标准化的语言。JavaScript 的一个术语就是“语言”,仅此而已。
2021-03-17 10:39:53
Javascript 还具有 ECMA 规范/标准中没有的其他附加功能” 您能否举例说明这些功能?
2021-03-25 10:39:53
ES5、ES2015 和 BabelJS 的总结确实澄清了当他从服务器端编程进入当今的 JS 脚本世界时可能会遇到的许多困惑。很好的答案。+1
2021-03-26 10:39:53
对于我的问题,我试图指出答案措辞中的潜在错误。使用了“实施”一词。JavaScript 被称为“最流行的实现”。实现是“技术规范的实现”。这转化为软件那么我想知道这个名为“JavaScript”的软件在哪里。
2021-04-01 10:39:53

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 组成)

能给个参考JavaScript = ECMAScript + DOM API;吗?
2021-03-17 10:39:53
那么 node.js 中的什么不是 JavaScript?因为它没有 DOM API。
2021-04-03 10:39:53
@jerone我在编写 JavaScript 代码时使用的是什么版本的 ECMAScript?它是否因浏览器或库而异?
2021-04-07 10:39:53
没错。 “Node.js 是针对现代版本的 V8 构建的。” & “V8 实现了 ECMA-262,第 5 版中指定的 ECMAScript...” & “然而,DOM 通常不是由 JavaScript 引擎提供,而是由浏览器提供。V8 也是如此——谷歌浏览器提供了多姆。” (来源:nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction
2021-04-08 10:39:53
@koray-tugay 除了这里,关于 JavaScript 到底是什么的文档并不多。我想这就是这个问题如此受欢迎的原因。“公式”JavaScript = ECMAScript + DOM API;只是基于 JavaScript 所包含的整体商定的文档术语。
2021-04-12 10:39:53

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

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

我以为 Brandon 想在微软之前让 JS 成为一个标准,而他唯一能找到的就是 ECMA。
2021-03-21 10:39:53
网景和微软居然搞过一次?!
2021-04-08 10:39:53