anole1982 发表于 2013-1-22 21:48:26

[转]使用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]
查看完整版本: [转]使用delete操作符删除window对象属性的问题