一文看懂 ES 与 JavaScript的关系

发布时间:2018-08-27   浏览:

 随着互联网技术的发展,JavaScript也借助于Chrome V8引擎从前端转战到服务器端,而JavaScript的前端框架也层出不穷,如React、Angular、Vuejs等,在学习或者使用这些前端框架时,经常会接触到一个重要的名词ES或者ES6。那么什么是ES以及ES与JavaScript之间的关系是什么,这里给大家一一说明。


1、JavaScript 的由来

1994年,网景公司(Netscape)发布了 Navigator 浏览器 0.9 版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是此时的浏览器还无法与用户进行交互,简单举个例子,我们在登录时是否填写用户名和密码,浏览器无法实现校验,只能等数据发送到服务器端,由服务器端程序进行校验,如果没有填写,服务器端程序返回错误信息,提示用户用户名密码必须填写,在当时大部分互联网用户仅能通过 28.8 kbit/s 的调制解调器连接到网络的时代,这样的情况无疑让众多浏览器用户恼火。
因此Netscape急需一个客户端脚本语言从而能够使网页可以与用户进行交互,于是当时工作于 Netscape 的 Brendan Eich,开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。
就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个互联网新锐名气提升自身知名度。Netscape 的赌注最终得到回报,JavaScript 从此变成了互联网的前端开发必备技术。

2、JavaScript 与微软的 JScript

因为 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了 IE 3.0 并搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程中的重要一步。
在微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。

3、标准化之路

1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”。由来自 Netscape、Sun、微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。
在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。

4、ECMAScript

从 JavaScript 的标准化之路可以看到, ECMAScript 是 JavaScript 实现的标准, 那么 ECMAScript 有什么样的特性呢,ECMA-262 标准(第 2 段)的描述如下:
ECMAScript 可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的... ...
从这段描述可以看到, ECMAScript 可以为不同的宿主环境提供核心的脚本编程能力, 而 Web 浏览器是其宿主环境之一,但 Web 浏览器并不是其唯一的宿主环境, 这一点可能突破了众多 JavaScript 使用者的常规观念,不过如果了解过 nodejs,就会发现其运行在 Chrome V8 引擎中而非浏览器上。也就是 ECMAScript 是脱离于具体的宿主环境而制定的,所以无法从 ECMAScript 中找到关于 DOM(文档对象模型) 和 BOM(浏览器对象模型)相关的API的。那么 ECMAScript 到底对哪些方面进行标准化了呢?主要包含以下方面:
  • 语法
  • 数据类型
  • 语句
  • 关键字与保留字
  • 运算符
  • 对象

5、JavaScript 与 ECMAScript

ECMAScript 仅仅是一个脚本语言标准化描述,定义了脚本语言的所有语言语法、属性、方法和对象。其他脚本语言可以实现 ECMAScript 来作为功能的基准, JavaScript 作为浏览器端脚本语言,即实现了 ECMAScript 相关标准,还需要针对脚本语言运行的宿主环境(Web浏览器)和 Web 页面提供操作的API,所以现行 JavaScript 由以下三个部分构成:

5.1、ECMAScript 实现

ECMAScript 作为 JavaScript 核心基础,它规定了语言的组成部分:语法、类型、语句、关键字、保留字、操作符、对象等语言特性。

5.2、DOM(文档对象模型)

DOM 把整个 Web 页面映射为一个多层节点节点树,开发人员可借助 DOM 提供的 API,轻松地遍历、删除、添加、替换或修改任何文档节点。从而实现 Web 页面动态化,达到与用户进行交互的效果。

5.3、BOM(浏览器对象模型)

BOM 支持可以访问和操作浏览器窗口的浏览器对象模型,开发人员可以通过 BOM 提供的API控制浏览器显示的页面以外的部分,如浏览历史记录、窗口打开关闭等。

6、ES 与 ECMAScript

读到这里其实应该已经知道 ES 不过是 ESMAScript 的简写,但是在日常阅读相关文档时,ES 或者 ECMAScript 后通常会跟上一个数字,如 ES6 、 ES2015 等,这又是怎么回事呢?其实不管 ES 还是 ECMAScript 后跟的数字都是 ECMAScript 的版本号, ES 发展到今天主要有 ES1 、 ES2 、 ES3、 ES4 、 ES5 、 ES6(ES2015) 、 ES2016 、 ES2017 等。
ES 各个版本以及其发布的日期:
ES版本
发布日期
ES1
1997 年 06 月 
ES2
1998 年 06 月
ES3
1999 年 12 月
ES4
未通过
ES5
2009 年 12 月
ES6 或称为 ES2015
2015 年 06 月
ES2016
2016 年 06 月
ES2017
2017 年 06 月
从上表可以看到 ECMAScript 自 2015 年起每年将发布一个新版本,而新版本名称也不再采用 ES 或 ECMAScript 后跟版本号的形式, 而是使用 ES 或 ECMAScript 后加发布年份这种形式。当我们再看到 ES6 或者 ES2015 时我们应该能立马意识到它们是等同的,但是部分开发者也可能会把 ES6 当作泛指概念,把其理解为 ES5 之后所有的 ES 版本,所以部分文章中提到 ES6 语法却引入 ES2016 之后的特性也不为错。

7、主流浏览器对 ES6 的支持情况

目前主流的现代浏览器内核都提供了对 ES6 不同程度的支持实现,具体支持情况,可以通过http://kangax.github.io/compat-table/es6/ 查看。
分享到:

上一篇:《2018年中国程序员生存现状报告》

下一篇:返回列表