如何在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 数组去重

在Javascript中使数组中的所有数字成为绝对值[关闭]

JavaScript数组去重

如何将具有元素数组的每个对象的对象列表转换为具有子元素作为属性的对象数组

如何遍历两个数组的对象作为JavaScript中的以下输出

如何使用 Javascript 将元素的内部 HTML 文本替换为数组的一部分