如何在javascript中使作为数组元素的对象为空[重复]
Posted
技术标签:
【中文标题】如何在javascript中使作为数组元素的对象为空[重复]【英文标题】:how to null an object which is an array's element in javascript [duplicate] 【发布时间】:2014-01-20 06:18:21 【问题描述】:假设我在 javascript 中有一个对象数组:
var obj0 = new Object();
var obj1 = new Object();
var obj2 = new Object();
var obj3= new Object();
var array = new Array(obj0,obj1,obj2,obj3);
如果我写:
array[1] = null;
这将给我[obj0,null,obj2,obj3]
被空的是数组大小写而不是对象本身; obj1
不会在内存中真正被清空。
如何通过数组访问一个对象来为空?
【问题讨论】:
你真的应该使用文字语法,例如:var array = [, , , ];
Kpower,我想你说的是正确的解决方案!如果我不创建任何变量,则不会引用该对象,并且一旦数组单元为空,则该对象将在 GC 运行后消失。但对我来说,我没有创建我试图为空的对象,所以它对我不起作用。
【参考方案1】:
您只需要删除对该对象的所有引用,包括 obj1 引用。然后垃圾收集器会处理剩下的事情。
但是,如果您的 obj1 变量是一个局部变量(就像在您的代码 sn-p 中一样),您可以保持引用不变。当封闭的方法返回时,局部变量将被清理,随后被清空的对象也将被清理。
【讨论】:
我在我的应用程序中这样做是为了优化内存,我不知道在 javascript 中运行 GC 的频率是多少,所以这就是为什么我希望我可以立即使对象为空 这只是一个例子,我想为空的变量不是本地的 K.那么以上将适用:)【参考方案2】:我在 Smashing Magazine 上找到了一篇与您的问题相关的好文章。
在 JavaScript 中强制垃圾回收是不可能的。你 不想这样做,因为垃圾收集过程是 由运行时控制,它通常最清楚什么时候发生 应该清理干净。
http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/
【讨论】:
【参考方案3】:我认为“splice()”会有所帮助:
http://www.w3schools.com/jsref/jsref_splice.asp
var obj0 = new Object();
var obj1 = new Object();
var obj2 = new Object();
var obj3= new Object();
var array = new Array(obj0,obj1,obj2,obj3);
array.splice(1); // kill index 1
结果:[obj0,obj2,obj3]
。
【讨论】:
这将杀死数组单元而不是对象 感谢您的尝试,我赞成【参考方案4】:如果你试着这样写呢?
var array = new Array();
array[0] = new Object();
array[1] = new Object();
array[2] = new Object();
array[3]= new Object();
array[1] = null;
【讨论】:
和[obj0,null,obj2,obj3]一样,对象还活着:)【参考方案5】:正如 Kpower 所说,写作:
var array = [, , , ];
或
var array = new Array(new Object(),
new Object(),
new Object(),
new Object());
当清空任何数组单元格时:
array[1] = null;
这将有效地删除对象的引用,因此它将被垃圾收集。
【讨论】:
以上是关于如何在javascript中使作为数组元素的对象为空[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在Javascript中使数组中的所有数字成为绝对值[关闭]