ECMAScript是JavaScript的核心,但在web使用JavaScript,那么BOM(浏览器对象模型)才是真正的核心。
BOM的核心对象是window,它表示浏览器的一个实例。
在浏览器中,window对象既是JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。也就是说,在网页中定义的任何一个变量、对象和函数以window作为其Global对象。
1.全局作用域
既然window对象扮演着Global对象,那么所有在全局作用域中声明的对象、变量和函数都会变成window的属性和方法。
定义全局变量和在window对象上定义属性还是有差别的:全局变量不能通过delete删除,而在window对象上定义的属性则可以。
错误,在其他浏览器中都返回false
delete window.age;
//在IE<9是抛出错误,在其他浏览器中都返回true
delete window.color; //return true
alert(window.age); //28
alert(window.color); //undefined
在使用var语句添加window属性时,有一个名为[[Configurable]]的特性,这个特性的值被设置为false,因此这样定义的属性不可以通过delete删除。
在尝试访问未声明的变量会抛出错误,但通过查询window对象,可以知道某个可能未声明的变量是否存在。
错误,因为oldValue未声明
var newValue=oldValue;
//这里不会抛出错误,因为这是一次属性查询
var newValue=window.oldValue // alert(newValue); //undefined
其实很多全局JavaScript对象如localtion和navigator实际上都是window对象的属性。
2.窗口关系及框架
如果页面中包含框架,则每个框架都有自己的window对象,并保存在frames集合中。
在frame集合中,可以通过数值索引或框架名来进行访问。