JavaScript是一门高端的、动态的、弱类型的编程语言,非常适合面向对象和函数式的编程风格。
JavaScript的语法源自Java,它的一等函数(first-class function)来自于Scheme,它的基于原型(prototype-based)的继承来自于Self。

js的具体实现可能定义独有的全局变量和函数,每一种特定的js运行环境(服务器端、客户端等)都有自己的一个全局属性列表。这是需要牢记的。

1997年ECMA-262——定义一种名为ECMAScript的新脚本语言的标准编写完成。
第二年,ISO/IEC(国际标准化组织和国际电工委员会)也采用了ES作为标准,自此以后,浏览器开发商就开始致力于将ES作为各自js实现的基础,也在不同程度上取得了成功。

虽然js和ES通常都被人们用来表达相同的含义,但js的含义却比ECMA-262中规定的要多得多。
没错,一个完整的js实现应该由下面三个不同的部分组成

  • 核心(ECMAScript),提供核心语言功能
  • 文档对象模型(DOM),提供访问和操作网页内容的方法和接口
  • 浏览器对象模型(BOM),提供与浏览器交互的方法和接口

js的这三个组成部分,在当前的主流浏览器中都得到了不同程度的支持。

ECMAScript

由ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。

我们常见的Web浏览器只是ECMAScript实现可能的宿主环境之一。
宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互**。而这些扩展——如DOM,则利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。前面介绍过的Node以及众所周知的Adobe Flash也都是宿主环境。

既然ECMA-262标准没有参照Web浏览器,那它都规定了些什么内容呢?大致说来,它规定了这门语言的下列组成部分:

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

ECMAScript就是对实现该标准规定的各个方面内容的语言的描述。

JavaScript实现了ECMAScript,Adobe ActionScript同样也实现了ECMAScript。

以上内容来自-泽卡斯. JavaScript高级程序设计(第3版) (Kindle 位置 1012-1024). 人民邮电出版社. Kindle 版本.

DOM

文档对象模型(DOM,Document Object Model)是针对XML但经过扩展用于HTML的应用程序编程接口(API,Application Programming Interface)。DOM把整个页面映射为一个多层节点结构。HTML或XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。

在DOM标准出现了一段时间之后,Web浏览器才开始实现它。
目前,支持DOM已经成为浏览器开发商的首要目标,主流浏览器每次发布新版本都会改进对DOM的支持。下

BOM

Internet Explorer 3和Netscape Navigator 3有一个共同的特色,那就是支持可以访问和操作浏览器窗口的浏览器对象模型(BOM,Browser Object Model)。开发人员使用BOM可以控制浏览器显示的页面以外的部分。

而BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为JavaScript实现的一部分但却没有相关的标准。这个问题在HTML5中得到了解决,HTML5致力于把很多BOM功能写入正式规范。HTML5发布后,很多关于BOM的困惑烟消云散。
从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的JavaScript扩展算作BOM的一部分。

下面就是一些这样的扩展:

  • 弹出新浏览器窗口的功能;
  • 移动、缩放和关闭浏览器窗口的功能;
  • 提供浏览器详细信息的navigator对象;
  • 提供浏览器所加载页面的详细信息的location对象;
  • 提供用户显示器分辨率详细信息的screen对象;
  • 对cookies的支持;
  • 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。

由于没有BOM标准可以遵循,因此每个浏览器都有自己的实现。虽然也存在一些事实标准,例如要有window对象和navigator对象等,但每个浏览器都会为这两个对象乃至其他对象定义自己的属性和方法。现在有了HTML5,BOM实现的细节有望朝着兼容性越来越高的方向发展。第8章将深入讨论BOM。
以上来自——泽卡斯. JavaScript高级程序设计(第3版) (Kindle 位置 1138-1152). 人民邮电出版社. Kindle 版本.