BOM
BOM(浏览器对象模型)的核心是window对象
1. window对象
window表示浏览器的一个实例
window对象是js访问浏览器窗口的一个接口,也是es规定的es的Global对象,它们有权访问parseInt()等方法
1.1. 全局作用域
因为window对象同时是es的Global对象,所以所有全局作用域中声明的变量和函数都会变成window对象的属性和方法
//在全局作用域下声明
var age = 18;
function sayAge()
{
console.log(this.age);
}
//以下结果均是18
console.log(window.age);
sayAge();
window.sayAge();
复制代码
虽然全局变量会成为window对象的属性,但是这和在window对象上直接定义属性还是有差别的
全局变量不能通过delete操作符删除,但是直接定义的属性可以
但是在IE9的之前版本使用delete删除window属性语句会抛出错误,因为它有一个名为[[Configurable]]的特性,其值被设定为false
尝试访问未声明的变量会抛出错误,我们可以通过查询window对象来知道该变量是否未声明从而避免错误
未声明和未定义
使用没声明的这个变量会报错但是声明了但未定义会undifined
//访问未声明出错
var a = b;
//属性查询
var a = window.b
//就算b未定义也不会抛出错误
复制代码
1.2. 窗口关系及框架
frames集合中包含着页面中所有的框架,每一个框架都有自己的window对象.在frames集合中我们可以通过数值索引或框架名称来访问相对应的window对象,因为每一个框架的名称都包含在了window对象的name属性中.
我们可以通过window.frames[0]或者window.frames[“topFrame”]来引用最上方的框架。
但是,window对象里包含着一个top对象和self对象,他们两个分别指向最高最外层的框架和最低最里层的框架,二者都可以和window对象互换使用
//表达是一样的
window.frames[0];
top.frame[0];
复制代码
和top,self对象相对应的还有一个父对象parent,它直接指向当前框架的父框架.但在没有框架的情况下,parent一定等于top(此时它们都等于window).
我们可以将不同层次的window对象连缀起来
window.parent.parent.parent.parent.frames[0]
复制代码
1.3. 窗口位置
IE | Safari | Opera | Chrome | Firefox | |
---|---|---|---|---|---|
支持screenLeft和screenTop属性 | √ | √ | √ | √ | |
支持screenX和screenY属性 | √ | √ |