一、JavaScript 历史回顾

1995 年,JavaScript 问世,它的主要用途是代替服务器端语言处理输入验证,在此之前,验证字段需要与服务器的一次往返通信

如今,JavaScript 的应用不在局限于数据验证,而是渗透到浏览器窗口的方方面面。JavaScript 已被公认为主流的编程语言,能够实现复杂的计算与交互,包括闭包、匿名(lambda)函数,甚至元编程等特性

  • 1995 年,Brendan Eich 开发了 LiveScript 脚本语言,网景而后改名为 JavaScript 以蹭 Java 热度
  • 1996 年,微软加入 Web 浏览器领域,使用 JScript 作为 JavaScript 的实现
  • 1997 年,JavaScript 1.1 作为提案被提交给 ECMA,制定了 ECMAScript 这个新脚本语言标准
  • 1998 年,ISO 和 IEC 也将 ECMAScript 采纳为标准,此后浏览器均以此依据,实现它们各自的 JavaScript

二、JavaScript 实现

完整的 JavaScript 实现包含以下几个部分

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

image.png

三、ECMAScript

ECMAScript 并不局限与 Web 浏览器,事实上,这门语言没有输入和输出之类的方法。ECMA-262 将这门语言作为一个基准来定义,以便在它之上再构建更稳健的脚本语言。Web 浏览器知识 ECMAScript 实现可能存在的一种宿主(host environment)。如果不涉及浏览器的话,它在基本层面上描述了:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

ECMScript 只是对实现这个规范描述的所有方面的一门语言称呼。JavaScript 实现了 ECMAScript

四、DOM

文档对象模型是一个应用编程接口(API),HTML 页面的每个组成部分都是一种节点,包含不同的数据

DOM 通过创建表示文档的树,让开发者可以随心所欲地控制网页的内容和结构。使用 DOM API,可以轻松地删除、添加、替换、修改节点

1998 年 10 月,DOM Level 1 成为 W3C 的推荐标准。这个规范有两个模块组成:DOM Core 和 DOM HTML。前者提供一种映射 XML 文档,从而方便访问和操作文档任意部分的方式;后者扩展了前者,并增加了特定于 HTML 的对象和方法。

DOM 级别有 Level 1、Level 2、Level 3、Level 4

除了 DOM Core 和 DOM HTML,有些其他语言也发布了自己的 DOM 标准。下面列出的语言是基于 XML 的,每一种都增加了改语言独特的 DOM 方法和接口:

  • 可伸缩矢量图(SVG,Scalable Vector Graphics)
  • 数学标记语言(MathML,Mathematical Markup Language)
  • 同步多媒体集成语言(SMIL,Synchronize Multimedia Integration Language)

五、BOM

BOM 是浏览器对象模型,用于支持访问和操作浏览器的窗口。使用 BOM,开发者可以操控浏览器显示页面之外的部分。HTML5 之前,与 BOM 相关的操作有很多问题,HTML5 改变了这个局面,以正式规范的形式涵盖了尽可能多的 DOM 特性。

DOM 主要针对浏览器窗口和子窗口,不过人们通常把任何特定于浏览器的扩展都归于 BOM 的范畴内,比如:

  • 弹出新浏览器窗口的能力
  • 移动、缩放和关闭浏览器窗口的能力
  • navigator 对象,提供浏览器的详尽信息
  • location 对象,提供浏览器加载页面的详尽信息
  • screen 对象,提供关于用户屏幕分辨率的详尽信息
  • performance 对象,提供浏览器内存图占用、导航行为和时间统计的详尽信息
  • 对 cookie 的支持
  • 其他自定义对象,如 XMLHttpRequest 和 IE 的 ActiveXObject

六、小结

JavaScript 是一门用来与网页交互的脚本语言,包括三个部分

  • ECMAScript:由 ECMA-262 定义并提供核心功能
  • 文档对象模型(DOM):提供与网页内容交互的方法和接口
  • 浏览器对象模型(BOM):提供与浏览器交互的方法和接口

JavaScript 的这三个部分得到了五大 Web 浏览器(IE、Firefox、Chrome、Safari 和 Opera) 不同程度的支持。所有浏览器基本上对 ES5(ECMAScript5)提供了完善的支持,而对 ES6(ECMAScript6)和 ES7(ECMAScript7)的支持度也在不断提升。这些浏览器对 DOM 的支持各不相同,但对 Level 3 的支持日益趋于规范。HTML5 中收录的 BOM 会因浏览器而异,不过开发者仍然可以假定存在很大一部分公共特性。

「@浪里淘沙的小法师」