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

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

1     var age = 29;
2     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 高级程序设计》

时间: 2024-11-08 09:01:10

delete window的属性,在ie8中报错问题的相关文章

tcpSrv在vs2008中报错

报错内容: 1>LINK : warning LNK4076: 无效的增量状态文件“F:\VC_proj\Cproj\Debug\Cproj.ilk”:正在非增量链接1>lase.obj : error LNK2028: 无法解析的标记(0A000013) "extern "C" int __stdcall closesocket(unsigned int)" ([email protected]@[email protected]),该标记在函数 &q

input输入框的border-radius属性在IE8下的完美兼容

在工作中我们发现搜索框大部分都是有圆角的,为此作为经验不足的前端人员很容易就想到,给input标签添加border-radius属性不就解决了嘛.不错方法确实是这样,但是不要忘了border-radius是css3属性,IE8不兼容!!!那么问题来了,怎样在IE8下完美兼容呢? 网上有很多关于css3属性在IE8下兼容的方法,需要引入PIE.htc这个文件,相信很容易搜到并下载该文件,但是用上position:relative;behavoior:url(PIE.htc);后发现圆角是实现了,但

MySql中报错:java.sql.SQLException: Incorrect string value: &#39;\xF0\x9F\x90\xBB&#39; for column

问题描述: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xBB' for column 'nickName' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226) at com.mysql.jdbc.M

Entity中Lazy Load的属性序列化JSON时报错

The server encountered an internal error that prevented it from fulfilling this request.org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: failed to lazily initialize a collection of role: com.party.dinner.entit

Swift在for循环中报错&#39;++&#39; is not a binary operator

最近刚开始学swift,遇到了一个非常诡异的问题.是在写for循环的时候出现语法错误.代码如下: for var i = 0; i < 10; i++{ println("hello world") } 按理说这是Swift里最简单的for循环的使用了.但是编译器还是报了两个错: '++ is not a binary operator' Operator is not a known binary operator 虽然苹果在官方文档里面说,建议通过++i这种方式使用自增运算符

Android中报错

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{*****Activity}: java.lang.ClassNotFoundException: Didn't find class "*****Activity" on path: /data/app/*******.apk..... 最近总是会遇到这样的错误.哦!不,是自从用了Android4.0中的Eclise后,才发现自己经常会面对

[Javascript] Window的属性

window 代表浏览器中一个打开的窗口. Window的属性 属性 描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模式对话框窗口的变量或变量数组. dialogHeight 设置或获取模式对话框的高度. dialogLeft 设置或获取模式对话框的左坐标. dialogTop 设置或获取模式对话框的顶坐标. dialogWidth 设置或获取模式对话框的宽度. fram

ThinkPHP5.0中报错could not find driver的解决方式

这个报错是我的tp5项目转移到另外的服务器中发生的错误, 其中报错信息中还包含这pdo等字眼 解决方法:在php.ini中开启php_pdp_mysql.dll

词云:解决pip install wordcloud安装过程中报错“error: command &#39;x86_64-linux-gnu-gcc&#39; failed with exit status 1”问题

外部环境:ubuntu16.04, 64bits, 全局环境python2.7 在虚拟环境(python3.5)中执行 pip install wordcloud 时安装失败,报错: error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Failed building wheel for wordcloud Running setup.py