JavaScript高级程序设计之BOM之window 对象之全局作用域 第8.1.1讲笔记

ECMAScript 是JavaScript 的核心,但如果要在Web 中使用JavaScript,那么BOM(浏览器对象模
型)则无疑才是真正的核心。BOM 提供了很多对象,用于访问浏览器的功能,这些功能与任
何网页内容无关。多年来,缺少事实上的规范导致BOM 既有意思又有问题,因为浏览器提供商会按照各
自的想法随意去扩展它。于是,浏览器之间共有的对象就成为了事实上的标准。这些对象在浏览器中得以
存在,很大程度上是由于它们提供了与浏览器的互操作性。W3C 为了把浏览器中JavaScript 最基本的部分

标准化,已经将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

我们在全局作用域中定义了一个变量age 和一个函数sayAge(),它们被自动归在了window 对象
名下。于是,可以通过window.age 访问变量age,可以通过window.sayAge()访问函数sayAge()。

由于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

刚才使用var 语句添加的window 属性有一个名为[[Configurable]]的特性,这个特性的值被
设置为false,因此这样定义的属性不可以通过delete操作符删除。IE8及更早版本在遇到使用delete
删除window 属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。IE9 及更高版
本不会抛出错误。
另外,还要记住一件事:尝试访问未声明的变量会抛出错误,但是通过查询window 对象,可以知
道某个可能未声明的变量是否存在。例如:

//这里会抛出错误,因为oldValue 未定义
var newValue = oldValue;
//这里不会抛出错误,因为这是一次属性查询
//newValue 的值是undefined
var newValue = window.oldValue;

本章后面将要讨论的很多全局JavaScript 对象(如location 和navigator)实际上都是window
对象的属性。
Windows Mobile 平台的IE 浏览器不允许通过window.property = value 之类
的形式,直接在window 对象上创建新的属性或方法。可是,在全局作用域中声明的
所有变量和函数,照样会变成window 对象的成员。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值