请问执行delete操作之后内存是立马就被回收了吗?

PerterPon 2013-05-02 03:36:58

var t = {
test : 333
};
delete t.test;

如上代码,请问test属性占用的内存是立马就被回收了么?还是只是做个标示,等待垃圾回收的到来?
如果还是等垃圾回收的时候再回收的话,那么,这和 t.test = undefined; 这句话有什么区别呢?
在此先谢各位了哈。
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
l676331991 2013-05-04
  • 打赏
  • 举报
回复
如下:

a = {p:1};
'p' in a
//true
a.p = undefined
'p' in a
//true
delete a.p
'p' in a
//false
PerterPon 2013-05-02
  • 打赏
  • 举报
回复
找了下资料,还有自己测试了一下,设置为undefined或者null只是将属性或者方法设置为这个值,该对象依然存在这个属性或者方法,使用delete操作,会将该属性或者方法从该对象中删除,这个对象就没有这个方法了,但是由于js对于未定义的方法或者属性默认值都是undefined,所以造成了最终的效果差不多,其实若是真正想删除某个属性或方法,只有使用delete一种方式,所以delete操作符还是具有不可替代性的。
ftiger 2013-05-02
  • 打赏
  • 举报
回复
不只是解除对其引用吧,相当于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>



abbywl 2013-05-02
  • 打赏
  • 举报
回复
delete 删除对象属性或方法的引用,设置为 undefined即创建的未初始化的变量,不能删除未定义的属性和方法。只知道这些,其它就不知道了
引用 3 楼 qqwswxdo 的回复:
那请问delete操作符有什么不可替代性么?
引用 2 楼 abbywl 的回复:
只是解除对其引用,等同于 t.test = undefined;
PerterPon 2013-05-02
  • 打赏
  • 举报
回复
那请问delete操作符有什么不可替代性么?
引用 2 楼 abbywl 的回复:
只是解除对其引用,等同于 t.test = undefined;
abbywl 2013-05-02
  • 打赏
  • 举报
回复
只是解除对其引用,等同于 t.test = undefined;
functionsub 2013-05-02
  • 打赏
  • 举报
回复
应该是 delete t.test t.test = undefined; t.test = null; 都是一个效果。

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧