BOM学习笔记(一)

开头

终于在好几个礼拜之后,又回到了对js的学习,过几天有时间会写一些这段失踪的时间做微信小程序的一些体会。

Window对象

BOM的核心就是window,它具有着双重身份,既是JS访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这就意味着我们在网页中定义的任何一个对象、变量、函数,都会以window作为其Global对象,因此有权限来访问parse Int()等方法。

全局作用域

由于window对象有双重身份的特点,所以在全局作用域中声明的变量、函数都会变成window对象的属性和方法。

var age = 29;

function sayAge(){

          alert(this.age);

}

alert(window.age);          //结果为29

sayAge();                        //结果为29

window.sayAge();           //结果为29

这段代码中,我们在全局作用域中定义了一个age变量和一个sayAge函数,他们自定被归在了window

对象名下,于是我们就可以通过window.+对象/函数名来调用和访问他们。由于sayAge是存于全局作用域中的,所以this.age被映射到window.age,最后的结果仍是正确的。

如果不谈全局变量会归于window名下这一点,定义全局变量与在window对象上直接定义属性还是存在一点区别的,全局变量不能通过delete来删除,而直接在window对象上的定义的属性可以。

像这样:

var age = 29;

window .color = "red";

delete window.age;

delete window.color;             

alert(window.age);           //结果为29

alert(window.color);           //undefined

注意:IE8以及更早版本在遇到使用delete删除window属性的语句时,不管该属性最开始是如何创建的,都会报错,IE9以及以上版本才不会。

另外,还要记住,尝试访问没有声明过的变量会报错,但是通过查询window对象,可以知道某个可能未声明变量是否存在,例如:

var newValue = oldValue;             //这里会报错,因为oldValue未定义

var newValue = window.oldValue;      //这里不会报错,因为这是一次属性查询,oldValue的值是undefined

你可能感兴趣的:(BOM学习笔记(一))