码迷,mamicode.com
首页 > 编程语言 > 详细

BOM[javascript高级程序设计3.8笔记]

时间:2015-04-29 23:23:47      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

      ECMAScript是javascript的核心,但如果要在web中使用javascript,那么BOM(浏览器对象模型)则无疑是真正的核心。BOM提供了很多对象,用于访问浏览器的功能,在浏览器之间共有的对象渐渐成为了事实上的标准。W3C为了把浏览器中javascript最基本的部分标准化,已经将BOM的主要方面纳入了html5的规范中。

Window对象

@#BOM的核心对象是window,它表示浏览器的一个实例。在浏览器中,window对象有双重角色,它既是通过javascript访问浏览器窗口的一个接口,又是ECMAScript规定的global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其global对象,因此有权访问parseInt()等方法。

由于window对象同时扮演这ECMAScript中的global对象角色,因此所有全局作用域中声明的变量、函数都会变成window对象的属性和方法。举例如下:

  var age = 29;

  function sayAge(){

     alert(this.age);

  }

  alert(window.age);//29

  sayAge();//29

  window.sayAge();//29

这里在全局作用域中的定义,他们被自动归在window对象名下。由于sayAge()存在于全局作用域中,因此this.age会被映射到window.age。

其实定义全局变量与在window对象上直接定义属性还是有一点差别:    

      @#全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。举例如下:

  var age = 29;

  window.color = "red";

  delete window.age;//在ie<9时抛出错误,在其他浏览器则返回false;

  alert(window.age);//29

  delete window.color;//在ie<9时抛出错误,在其他浏览器会返回true;

  alert(window.color);//undefined

使用var语句添加的window属性有一个名为[configurable]的特性,这个特性的值被设置为false,因此这样定义的属性不可以通过delete操作符删除。Ie8级更早的版本在遇到使用delete删除window属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。

      @#尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在。举例如下:

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

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

 

BOM[javascript高级程序设计3.8笔记]

标签:

原文地址:http://www.cnblogs.com/aries1991/p/4467638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!