var t = { 
   test : 333
 };
delete t.test;如上代码,请问test属性占用的内存是立马就被回收了么?还是只是做个标示,等待垃圾回收的到来?
如果还是等垃圾回收的时候再回收的话,那么,这和   t.test = undefined;  这句话有什么区别呢?
在此先谢各位了哈。

解决方案 »

  1.   

    应该是delete t.test t.test = undefined;t.test = null;都是一个效果。
      

  2.   

    只是解除对其引用,等同于 t.test = undefined;
      

  3.   

    那请问delete操作符有什么不可替代性么?
      

  4.   

    delete 删除对象属性或方法的引用,设置为 undefined即创建的未初始化的变量,不能删除未定义的属性和方法。只知道这些,其它就不知道了
      

  5.   

    不只是解除对其引用吧,相当于map中的key也给删除了,只是设值为 undefined 或null 则key还存在。
    当然对于清理内存来说效果是一样的。
    <script type="text/javascript">
    <!--var showKeys = function (ob) {
    var keys=[];
    for(var key in ob){
    keys.push(key);
    };
    alert(keys.join(","));
    }
    var ff= {a:1,b:2,c:3};showKeys(ff);ff.a=null;
    showKeys(ff);ff.a= undefined;
    showKeys(ff);delete ff.a;
    showKeys(ff);
    //-->
    </script>
      

  6.   

    找了下资料,还有自己测试了一下,设置为undefined或者null只是将属性或者方法设置为这个值,该对象依然存在这个属性或者方法,使用delete操作,会将该属性或者方法从该对象中删除,这个对象就没有这个方法了,但是由于js对于未定义的方法或者属性默认值都是undefined,所以造成了最终的效果差不多,其实若是真正想删除某个属性或方法,只有使用delete一种方式,所以delete操作符还是具有不可替代性的。
      

  7.   

    如下:a = {p:1};
    'p' in a
    //true
    a.p = undefined
    'p' in a
    //true
    delete a.p
    'p' in a
    //false