您的位置:首页 > 其它

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

2015-09-09 15:59 831 查看
由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法,如下:

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 高级程序设计》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: