清除Javascript数组中的对象

可能重复:
如何在JavaScript中清空数组
在javascript中取消分配数组数组的最佳方式

我有一个对象数组:

var arr = [complexObj1, complexObj2];

如果我想清除数组并确保没有内存泄漏,下面会执行它吗?

arr.length = 0;

或者我需要迭代我的数组,并调用如下所示:

complexObj.release(); or
arr[0] = null; or 
delete arr[0];


如果数组由简单对象组成而没有引用其他方法或DOM元素,那么上述所有解决方案都足够了。

但是,如果数组包含的对象继而保持对已附加到DOM元素的事件处理函数的引用,则在清除该数组时,该对象不会被销毁。

var Complex = function(nodeId){
   this.node=document.getElementById(nodeId);
   this.handler=function(e){alert('wohooo'};

   this.node.addEventListener('click', this.handler);
}

var myArray = [new Complex('buttonOne'), new Complex('buttonTwo')];

如果您现在使用myArray = []重置数组。 该数组将被清理,但对象仍然拥有一个节点和一个活动事件处理程序,当按钮被点击时会触发,这意味着该对象不能从内存中移除。 你只是从数组中删除了对它的引用。

你的第一个想法是正确的,你应该以某种方式'销毁'复杂的对象,并删除它所持有的任何引用。

Complex.prototype.release = function() {
    this.node.removeEventListener('click',this.handler);
    delete this.handler;
    delete this.node

}

您现在循环访问数组并调用对象释放以从节点中删除事件侦听器。

这是我认为人们通常会错过的一个简单例子。 它不一定是事件处理程序,但可以是在复杂对象之外引用的任何东西。


只需重新初始化数组:

arr = [];

你需要做的只是

arr = null
链接地址: http://www.djcxy.com/p/23945.html

上一篇: Clearing objects from Javascript array

下一篇: How to clear the jsonArray in javascript