delete window的属性,在ie8中报错问题
2015-09-09 15:59
831 查看
由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法,如下:
我们在全局作用域中定义了一个变量age和一个函数sayAge ( ),它们被自动归在了window对象名下。
由于sayAge( )存在于全局作用域中,因此this.age被映射到window.age, 最终显示的仍然是正确的结果。
抛开全局变量会成为window对象的属性不谈, 定义全局变量与在window对象上直接定义属性还是有一点差别:全局变量不能通过delete操作符删除,而直接在window对象上的定义的属性可以。如下:
刚才使用var 语句添加的window属性有一个名为[ [ Configurable ] ]的特性,这个特性的值别设置为false,因此这样定义的属性不可以通过delete操作符删除,IE8及更早版本在遇到使用delete删除 window属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。IE9及更高版本不会抛出错误。
备注:
文章节选自《Javascript 高级程序设计》
var age = 29; function sayAge ( ){ alert ( this.age ); } alert( window.age); //29 sayAge(); // 29 window.sayAge( ); //29
我们在全局作用域中定义了一个变量age和一个函数sayAge ( ),它们被自动归在了window对象名下。
由于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; alert(window.age)// 29 alert( window.color) //undefined
刚才使用var 语句添加的window属性有一个名为[ [ Configurable ] ]的特性,这个特性的值别设置为false,因此这样定义的属性不可以通过delete操作符删除,IE8及更早版本在遇到使用delete删除 window属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。IE9及更高版本不会抛出错误。
备注:
文章节选自《Javascript 高级程序设计》
相关文章推荐
- 记c#中构造函数中this的用法
- [股票] 入市
- 0909 第一次上机课之《为什么学操作系统?》
- 0909《操作系统教程》理解和认识
- 什么是REST?以及RESTful的实现
- MySQL数据库(修改表)
- Spring注解入门
- PHP输入流php://input
- Android_向通知栏发送通知
- First Bad Version
- 【Android学习】实现listview反序
- Windows_dll中共享数据段___ data_seg()
- js基本概念注意点—数据类型
- awk详解
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- 0909操作系统初感
- MSSQL 当前数据库中已存在用户或角色,SQLServer2008,错误15023,
- PHP相等的问题
- js+java实现的头像上传和裁剪,完美兼容各种浏览器
- Android之TextUtils类介绍