码迷,mamicode.com
首页 > Windows程序 > 详细

delete window的属性,在ie8中报错问题

时间:2015-09-09 16:41:09      阅读:431      评论:0      收藏:0      [点我收藏+]

标签:

由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法,如下:
1     var age = 292     function sayAge ( ){
3        alert ( this.age );
4      }
5     alert( window.age); //29
6     sayAge(); // 29
7     window.sayAge( ); //29
我们在全局作用域中定义了一个变量age和一个函数sayAge ( ),它们被自动归在了window对象名下。
由于sayAge( )存在于全局作用域中,因此this.age被映射到window.age, 最终显示的仍然是正确的结果。
 
抛开全局变量会成为window对象的属性不谈, 定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。如下:
  
1    var age = 29;
2   window.color = ‘red’;
3   //在 IE < 9时抛出错误,在其他所有浏览器中都返回false 
4   delete window.age;
5   //在 IE < 9时抛出错误,在其他所有浏览器中都返回true
6   delete window.color;
7  
8   alert(window.age)// 29
9   alert( window.color) //undefined
 
刚才使用var 语句添加的window属性有一个名为[ [ Configurable ] ]的特性,这个特性的值别设置为false,因此这样定义的属性不可以通过delete操作符删除,IE8及更早版本在遇到使用delete删除 window属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。IE9及更高版本不会抛出错误。
备注:
文章节选自《Javascript 高级程序设计》

delete window的属性,在ie8中报错问题

标签:

原文地址:http://www.cnblogs.com/monkey-fish/p/4795008.html

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