[转]使用delete操作符删除window对象属性的问题
http://hi.baidu.com/jz1108/item/51e6aa3a0d6ae649033edcb5使用delete操作符删除window对象属性的问题
Javascript中的delete操作符可以用来删除对象的某个属性,但是当删除window对象的属性时,浏览器表现并不完全一致。
window.obj = {value: 1};
alert(enumObj(window.obj));
try{
delete window.obj;
}
catch(e){
alert("error: " + e.message);
}
alert(enumObj(window.obj));
function enumObj(o){
if (!o) return;
var s = "";
for (p in o){
s += p + ": " + o + "\n";
}
return s;
}
以上代码首先为window对象添加了obj属性,使用enumObj可以查看obj的内容,接着使用delete删除这个属性,再查看属性内容。我们用Firefox跑一下这段代码,结果是:
http://hiphotos.baidu.com/jz1108/pic/item/365a05dba6b3b04cd1164e6e.jpg
http://hiphotos.baidu.com/jz1108/pic/item/b6780501936f5a247aec2c69.jpg
我们看到Firefox成功删除了window的obj属性。那么IE呢?
http://hiphotos.baidu.com/jz1108/pic/item/7b2e50816051fbf2bd3e1e7c.jpg
http://hiphotos.baidu.com/jz1108/pic/item/139e77fbd3b3494e024f567e.jpg
http://hiphotos.baidu.com/jz1108/pic/item/7b2e50816051fbf2bd3e1e7c.jpg
IE比FF多弹出一次对话框,在try/catch中的删除代码执行出现了异常,最后的对话框验证了window的obj属性还是存在的。至于为什么会出现异常现在还没有结论。另外经验证,Safari、Opera和Chrome的结果和Firefox一致。
最近网上看到一篇文章,专门写delete操作符的,其中也提到了IE的这个bug。推荐阅读:http://perfectionkills.com/understanding-delete/
http://my.oschina.net/warmcafe/blog/75845
今天读到一篇特好的文章,解决了我一直以来对javascript中delete用法不清的疑惑。
------------------------------------------------------------------------------------------------
先看一个在Firebug控制台和实际运行环境中执行同一段代码的差别:
在Firebug中一次执行如下几句:
<div class="syntaxhighlighter"><div class="lines"><div class="line alt1">1var sum = function(a, b) {return a + b;}
页:
[1]