删除所有元素
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
相关问题 。