删除所有元素

var arr = [1, 2, 3, 4];

方法 1

创建一个新数组并使用新数组覆盖现有数组引用。

arr = [];

必须小心,因为这不会从原始阵列中删除任何项目。传递给函数时,数组可能已被关闭。虽然你可能没有意识到这一点,但阵列将在函数的生命周期内保留在内存中。这是内存泄漏的常见原因。

数组清除错误导致内存泄漏的示例:

var count = 0;

function addListener(arr) { // arr is closed over
  var b = document.body.querySelector("#foo" + (count++));
  b.addEventListener("click", function(e) { // this functions reference keeps
    // the closure current while the
    // event is active
    // do something but does not need arr       
  });
}

arr = ["big data"];
var i = 100;
while (i > 0) {
  addListener(arr); // the array is passed to the function
  arr = []; // only removes the reference, the original array remains
  array.push("some large data"); // more memory allocated
  i--;
}
// there are now 100 arrays closed over, each referencing a different array
// no a single item has been deleted

为防止内存泄漏的风险,请使用以下两种方法之一清空上述示例的 while 循环中的数组。

方法 2

设置 length 属性会将所有数组元素从新数组长度删除到旧数组长度。这是删除和取消引用数组中所有项目的最有效方法。保留对原始数组的引用

arr.length = 0;

方法 3

与方法 2 类似,但返回包含已删除项的新数组。如果你不需要这些项,则此方法效率低,因为仍会创建新数组以立即取消引用。

arr.splice(0); // should not use if you don't want the removed items
// only use this method if you do the following
var keepArr = arr.splice(0); // empties the array and creates a new array containing the
                             // removed items

相关问题