如何将JavaScript的数组清空,其实不用想,就几种方法。

争议比较大的是以下两种方法:

// 方法一 直接替换整个数组为一个新的对象
arr = [];  
// 方法二 将数组的长度赋值为0
arr.length = 0;

其争议就在,方法一是将整个数组替换成了一个新的空数组,同时也将此数组原有的对象属性都移除掉了。

此时如果没有对原数组的引用,那么原数组就会被释放。

可是我们知道JavaScript数组是引用类型,如果有其他的引用,即使将数组直接赋一个空数组,那么原数组也不会被释放。

var arrOne = [1, 2, 3, 4, 5];  
var arrTwo = arrOne;  
arrOne = [];  
console.log(arrTwo); // [1, 2, 3, 4, 5]

可以看到,arrTwo依然保持着对原始数组的引用,原数组并没有被释放。

如果将数组的长度直接赋为0,那么数组也一样会被清空掉。JavaScript数组的长度是可以被赋值的,而且赋为0以后,该数组恰恰就变成了一个空数组,而且对其引用的其他数组也可以被清空,于此同时,也保留了原数组的其他属性。

var arrOne = [1, 2, 3, 4, 5];  
var arrTwo = arrOne;  
arrOne.length = 0;  
console.log(arrTwo); // []

看起来第二种方法已经非常好了,那么为什么还有所争议呢?那就是效率问题,经过测试,将数组直接变成一个空数组效率会更高一些,如果不再需要原有数组的其他属性,且没有其他引用,那么第一种方式可能更适合一些。

两种方法各有利弊,看在项目中的实际情况,个人认为有时不能说哪种方法最好,只能说哪种方法更合适。