标准化,已经将BOM 的主要方面纳入了HTML5 的规范中。
8.1 window 对象
BOM 的核心对象是window,它表示浏览器的一个实例。在浏览器中,window 对象有双重角色,
它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScript 规定的Global 对象。这意味着
在网页中定义的任何一个对象、变量和函数,都以window 作为其Global 对象,因此有权访问
parseInt()等方法。
8.1.1
全局作用域
由于window 对象同时扮演着ECMAScript 中Global 对象的角色,因此所有在全局作用域中声明
的变量、函数都会变成window 对象的属性和方法。来看下面的例子。
var age = 29;
function sayAge(){
alert(this.age);
}
alert(window.age); //29
sayAge(); //29
window.sayAge(); //29
由于sayAge()存在于全局作用域中,因此this.age 被映射到window.age,最终显示的仍然是正确
的结果。
抛开全局变量会成为window 对象的属性不谈,定义全局变量与在window 对象上直接定义属性还
是有一点差别:全局变量不能通过delete 操作符删除,而直接在window 对象上的定义的属性可以。
例如:
var age = 29;
window.color = "red";
//在IE < 9 时抛出错误,在其他所有浏览器中都返回false
delete window.age;
//在IE < 9 时抛出错误,在其他所有浏览器中都返回true
delete window.color; //returns true
alert(window.age); //29
alert(window.color); //undefined
//这里会抛出错误,因为oldValue 未定义
var newValue = oldValue;
//这里不会抛出错误,因为这是一次属性查询
//newValue 的值是undefined
var newValue = window.oldValue;
本章后面将要讨论的很多全局JavaScript 对象(如location 和navigator)实际上都是window
对象的属性。
Windows Mobile 平台的IE 浏览器不允许通过window.property = value 之类
的形式,直接在window 对象上创建新的属性或方法。可是,在全局作用域中声明的
所有变量和函数,照样会变成window 对象的成员。