JavaScript诞生背景:
JavaScript诞生于1995年。当时,它的主要目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作。在JavaScript问世之前,必须把表单数据发送到服务器端才能确定用户是否没有填写某个必填域,是否输入了无效的值。Netscape Navigator希望通过JavaScript来解决这个问题。在人们普遍使用电话拨号上网的年代,能够在客户端完成一些基本的验证任务绝对是令人兴奋的。毕竟,拨号上网的速度之慢,导致了与服务器的每一次数据交换事实上都成了对人们耐心的一次考验
JavaScript的主要目的是处理以前由服务器语言负责的一些输入验证操作。在JavaScript问世之前,必须把表单数据发送到服务器端才能确定用户有没有填写某个必填域,是否输入了无效值。
ECMA-262是一种名为ECMScript的脚本语言标准,浏览器开发商使用ECMAScript作为各自JavaScript实现的基础。
(一)JavaScript实现
虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多得多。没错,一个完整的JavaScript实现应该由下列三个不同的部分组成
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
(二)ECMAScript
由于ECMA-262定义的ECMAScript与Web浏览器没有依赖关系。实际上,这门语言本身并不包含输入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。我们常见的Web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便语言与环境之间对接交互。而这些扩展-----如DOM,则利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他宿主环境包括Node(一种服务端JavaScript平台)和Adobe Flash。
既然ECMA-262标准没有参照Web浏览器,那它都规定了些什么内容呢?大致来说,它规定了这门语言的下列组成部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 对象
ECMAScript就是对实现该标准(ECMA-262)规定的各个方面内容的语言的描述。JavaScript实现了ECMAScript,Adobe ActionScript同样也实现了ECMAScript。
(三)文档对象模型(DOM)
文档对象模型(DOM,Document Object Model)是针对XML但经过扩展用于HTML的应用程序编程接口(API, application Programming Interface)。 DOM把整个页面映射为一个多层节点结构。HTML或XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。看下面这个HTML页面:
<html>
<head>
<title>Simple Page</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
在DOM中,这个页面可以通过如下分层节点图表示:
通过DOM创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助DOM提供的API,开发人员可以轻松自如地删除,添加,替换或修改任何节点。
(四)浏览器对象模型(BOM)
Internet Exporer 3和Netscape Navigator 3 有一个共同的特色,那就是支持可以访问和操作浏览器窗口的浏览器对象模型(BOM, Browser Object Model)。开发人员使用BOM可以控制浏览器显示的页面以外的部分。而BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为JavaScript实现的一部分但却没有相关的标准。这个问题在HTML5中得到了解决,HTML5致力于把很多BOM功能写入正式规范。HTML5发布后,很多关于BOM的困惑烟消云散。
从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的JavaScript扩展算作BOM的一部分。下面就是一些这样的扩展:
1. 弹出新浏览器窗口的功能
2. 移动,缩放和关闭浏览器窗口的功能;
3. 提供浏览器详细信息的navigator对象;
4. 提供浏览器所加载页面的详细信息的location对象;
5. 提供用户显示器分辨率详细信息的screen对象
6. 对cookies的支持;
7. 像XMLHttpRequest和IE的ActiveXObject这样的自定义对象。
由于没有BOM标准可以遵循,因此每个浏览器都有自动机的实现。虽然也存在一些事实标准,例如要有window对象和navigator对象等,但每个浏览器都会为这两个对象仍至其他对象定义自己的属性和方法。现在有了HTML5,BOM实现的细节有望朝着兼容性越来越高的方向发展