对详解JavaScript与ECMAScript的区别的笔记,加上了其他资料帮助理解。
笔记和补充
这篇文章通俗易懂地介绍了什么是ECMA International, ECMA-262, ECMAScript (es),JavaScript, JavaScript引擎。
ECMA International
一个指定技术标准的组织
ECMA-262
由Ecma International发布的262号标准,用于脚本语言。
它描述了以下内容:语法,类型,语句,关键字,保留字,运算符,对象。
ECMAScript
即ECMA-262,只是专门另起了一个名字,经常简写为es。内容类似:
可以看到是制定了一些标准。注意它仅仅是一个描述而不是脚本语言,它定义了脚本语言的所有属性、方法和对象。其他语言(e.g. JavaScript)可以实现 ECMAScript 来作为功能的基准。
ECMAScript在不断地更新:
JavaScript
一种通用的脚本编程语言,它遵循了 ECMAScript 标准。
可以这么说,通过阅读ECMAScript 标准,你可以学会怎样实现一个脚本语言;而通过阅读JavaScript 文档,你可以学会怎样使用脚本语言编程。
ECMAScript和JavaScript的出现
1994年,一家名为Mosaic Communications的公司在加州芒廷维尤成立了,并雇用了许多原来的NCSA Mosaic开发者用来开发Mosaic Netscape,该公司的目标是取代NCSA Mosaic成为世界第一的网页浏览器。
第一个版本的网页浏览器Mosaic Netscape 0.9于1994年底发布。在四个月内,已经占据了四分之三的浏览器市场,并成为1990年代互联网的主要浏览器。该浏览器于同年更名为Netscape Navigator,公司更名为Netscape Communications(网景)。
网景预见到网络需要变得更动态。公司的创始人马克·安德森认为HTML需要一种胶水语言,让网页设计师和兼职程序员可以很容易地使用它来组装图片和插件之类的组件,且代码可以直接编写在网页标记中。1995年,网景招募了布兰登·艾克,决定发明一种与Java搭配使用的辅助脚本语言并且语法上有些类似。该语言最初命名为Mocha,1995年9月在Netscape Navigator 2.0的Beta版中改名为LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript
(当时为了让这门语言搭上Java这个编程语言“热词”,因此将其临时改名为JavaScript,日后这成为大众对这门语言有诸多误解的原因之一)。
JavaScript推出后在浏览器上大获成功,微软公司在不久后就为Internet Explorer 3浏览器推出了JScript,以与处于市场领导地位的网景产品同台竞争。JScript也是一种JavaScript实现,这两个JavaScript语言版本在浏览器端共存意味着语言标准化的缺失,发展初期,JavaScript的标准并未确定,同期有网景的JavaScript,微软的JScript双峰并峙。除此之外,微软也在网页技术上加入了不少专属对象,使不少网页使用非微软平台及浏览器无法正常显示,导致在浏览器大战期间网页设计者通常会把“用Netscape可达到最佳效果”或“用IE可达到最佳效果”的标志放在主页。随着Internet Explorer 4的发布,微软引入了动态HTML的概念,但语言实现和不同专有化的文档对象模型的差异仍然存在,成为网络上普及使用JavaScript的阻碍。
1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262。JavaScript成为了ECMAScript最著名的实现之一。除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言。
可以看出,ECMAScript 是基于 JavaScript 的,而 JavaScript 也是基于 ECMAScript 的,两者密不可分。
JavaScript 引擎对ECMAScript的支持
JavaScript 引擎:理解并执行 JavaScript 代码的解释器。浏览器中会有 JavaScript 引擎,比如 Chrome 有 V8,Firefox 有 SpiderMonkey,Edge 有 Chakra。
尽管浏览器的 JavaScript 引擎都能理解 JavaScript,但是有些浏览器的理解能力更强,它们对 JavaScript 的支持是不一样的。而且,发布一个新版本的 ECMAScript 时,并不意味着所有 JavaScript 引擎都会马上拥有新的特性,它们会逐渐支持新版本的ECMAScript。
不同JavaScript引擎对es的支持程度 [来自维基百科-ECMAScript]:
问题
ECMAScript新版本出现之后,JavaScript本身会即时更新吗?
ECMAScript只是一个标准【比如布尔值可取的值有哪些,含义是什么】,而JavaScript是一种具体的编程语言【js的版本更新大概更倾向于引入了新的api e.g.在JavaScript1.8.5中引入了Array.isArray这个api】,所以我认为完全可以在编程的时候使用最新的ECMAScript标准,这两者之间并没有矛盾和冲突。
只不过,问题是用新的标准编出的代码,能否正常显示,也即JavaScript引擎的支持度问题。所以最重要的还是我们的各类使用JavaScript的软件是否支持ECMAScript新版本。