/ Array

JavaScript清空数组的方法

方法1:将数组 length 赋值为0

var arr= [1,2,3,4];  
arr.length = 0;  
console.log(arr); // 输出 [],数组被清空
Prototype 中数组的 clear 方法和 mootools 库中数组的 empty() 方法使用这种方式清空数组。Prototype扩展:
Array.prototype.clear = function()
{
    this.length = 0;
};

// call it: arr.clear();

方法2:创建新的空数组[ ]

var arr = [1,2,3,4];  
arr = []; // 赋值为一个空数组以清空原数组
Ext 库Ext.CompositeElementLite类的 clear 方法使用这种方式清空。

方法3:splice()删除数组元素

arr.splice(0, arr.length);
prototype扩展:
Array.prototype.clear = function() {
    this.splice(0, this.length);
};

//call: arr.clear();

孰优孰劣

先看一个测试结果
三种清空数组方法在Windows 8上的测试结果
方法 (Ops/sec) IE 10 Chrome 26 Firefox 19.0
arr.length = 0; 2,965,124 ±1.37% fastest 14,290,495 ±1.72% 72% slower 4,384,671 ±1.04% 58% slower
arr = []; 2,183,212 ±9.32% 32% slower 52,596,09 ±4.08% fastest 10,812,854 ±3.95% fastest
arr.splice(0, arr.length); 1,038,660 ±8.39% 67% slower 6,424,096 ±1.14% 87% slower 3,489,946 ±6.88% 69% slower
splice()的执行效率最低,这在三个浏览器上都表现一致,也很容易理解:splice() 删除数组元素的同时返回一个和原来一样的数组。如果不考虑浏览器兼容,可弃用此法。

关于前两种方法,有很多争论,单从性能论,创建空数组重新赋值要快很多(IE 10例外);设置 length=0 则可以保持引用。综合而言,如果要清空的数组没有引用,空数组赋值无疑是简洁又高效的方法;如果需要保持原数组的属性,那就使用 length=0

参考链接: