jejuin / Blog

我的博客:记录、总结、分享前端知识
MIT License
4 stars 0 forks source link

JavaScript 简介(背景) #16

Open jejuin opened 4 years ago

jejuin commented 4 years ago

JavaScript 是什么

JavaScript 是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验 HTML 表单输入的正确性,起源于 Netscape 公司的 LiveScript 语言。

JavaScript 诞生背景

在 JavaScript 问世之前,必须把表单数据发送到服务器端才能确定用户是否没有填写某个必填域,是否输入了无效的值。因为拨号上网的速度很慢,导致了与服务器的每一次数据交换耗时很长,所以 Netscape Navigator(网景)希望通过 JavaScript 来解决这个问题,实现在客户端完成一些基本的验证任务。

Netscape 公司的布兰登·艾奇( Brendan Eich),开始着手为计划于 1995 年 2 月发布的 Netscape Navigator 2 开发一种名为 LiveScript 的脚本语言——该语言将同时在浏览器和服务器中使用(它在服务器上的名字叫 LiveWire)。为了赶在发布日期前完成 LiveScript 的开发,Netscape 与 Sun 公司建立了一个开发联盟。在 Netscape Navigator 2 正式发布前夕, Netscape 为了搭上媒体热炒 Java 的顺风车,临时把 LiveScript 改名为 JavaScript。至此 JavaScript 1.0版本就诞生了。

IE 浏览器 JScript

在 JavaScript 1.0 发布时,Netscape Navigator(网景导航者浏览器)主宰着浏览器市场,微软的 IE 浏览器则扮演着追赶者的角色。微软在推出 IE3 的时候发布了自己的 VBScript 语言,同时加入了名为 JScript 的 JavaScript 实现(命名为 JScript 是为了避开与 Netscape 有关的授权问题),以此很快跟上了Netscape的步伐。

JScript 1.0 是基于 Netscape JavaScript 1.0 开发,于 1996 年 8 月随同 Internet Explorer 3.0 发布。

对 IE 而言, 当我们提到 JavaScript 时,实际上就是指 IE 对 JavaScript (ECMAScript)的实现——JScript。

ECMAScript 诞生背景

微软推出其 JavaScript 实现意味着有了两个不同的 JavaScript 版本: Netscape Navigator 中 JavaScript、 Internet Explorer 中的 JScript。与 C 及其他编程语言不同,当时还没有标准规定 JavaScript 的语法和特性,两个不同版本并存的局面已经完全暴露了这个问题。随着业界担心的日益加剧, JavaScript的标准化问题被提上了议事日程。

1997 年,以 JavaScript 1.1 为蓝本的建议被提交给了欧洲计算机制造商协会( ECMA, EuropeanComputer Manufacturers Association)。该协会指定 39 号技术委员会( TC39, Technical Committee #39)负 责 “ 标 准 化 一 种 通 用 、 跨 平 台 、 供 应 商 中 立 的 脚 本 语 言 的 语 法 和 语 义 ” 。 TC39 由来自 Netscape、 Sun、微软、 Borland 及其他关注脚本语言发展的公司的程序员组成,他们经过数月的努力完成了 ECMA-262——定义一种名为 ECMAScript(发音为“ek-ma-script”)的新脚本语言的标准。

第二年, ISO/IEC( International Organization for Standardization and International Electrotechnical Commission,国标标准化组织和国际电工委员会)也采用了 ECMAScript 作为标准(即 ISO/IEC-16262)。自此以后,浏览器开发商就开始致力于将 ECMAScript 作为各自 JavaScript 实现的基础。

JavaScript 与 ECMAScript 的关系

ECMAScript 是 JavaScript 的标准和规范,JavaScript 是 ECMAScript 的实现

通过阅读 ECMAScript 标准,你可以学会怎样实现一个脚本语言; 而通过阅读 JavaScript 文档,你可以学会怎样使用脚本语言编程。

如通过汽车图纸,你可以知道怎样生产汽车;而通过汽车使用说明,你可以学会如何开车;

JavaScript 实现

虽然 JavaScript 和 ECMAScript 通常都被人们用来表达相同的含义,但 JavaScript 的含义却比 ECMA-262 中规定的要多得多。ECMA-262 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。

JavaScript 的实现需要宿主环境,宿主环境不仅提供基本的 ECMAScript 实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。

我们常见的 Web 浏览器只是 ECMAScript 实现可能的宿主环境之一。而这些扩展——如 DOM,则利用 ECMAScript 的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他宿主环境包括 Node(一种服务端 JavaScript 平台)和 Adobe Flash。

一个完整的 JavaScript 实现包括:(ECMAScript 核心 + 宿主环境对象)

  1. 核心 ( ECMAScript )- 提供核心语言功能:语法/类型/语句/关键字/保留字/操作符/对象

  2. 文档对象模型 ( DOM ) - 提供访问和操作网页内容的方法和接口

  3. 浏览器对象模型 ( BOM ) - 提供与浏览器交互的方法和接口 image

ECMAScript 受主流 Web 浏览器支持情况

image

图片来源自《JavaScript 高级程序设计》

ECMAScript 版本

自 2015 年起,每年 6 月都会发布一个新的 ECMAScript 版本。 image

图片来源自维基百科

ECMAScript 规范文档:https://www.ecma-international.org/publications/standards/Ecma-262-arch.htm