本文总结JavaScript中清空数组的三种常见方式:使用splice方法、将length赋值为0以及重新赋值为空数组。通过实际代码测试对比发现,重新赋值方式效率更高,而length赋值能保留原数组属性。文章结合Prototype等库的实现,推荐根据是否需保留属性选择合适方案。
使用splice清空数组
第一种清空数组的方法是使用splice函数。
var ary = [1,2,3,4];
ary.splice(0,ary.length);
console.log(ary); // 输出 [],空数组,即被清空了
修改length属性清空数组
第二种方法是将数组的length属性直接赋值为0。
这种机制在特性上颇具趣味性,因为在其他语言如Java中,数组的length属性是只读的,不允许被赋值。例如在Java代码中:
int[] ary = {1,2,3,4};
ary.length = 0;
上述Java代码会导致编译错误,无法通过编译检查。然而,在JavaScript中这样做是完全合法的,并且能够成功将数组清空。例如:
var ary = [1,2,3,4];
ary.length = 0;
console.log(ary); // 输出 [],空数组,即被清空了
目前,Prototype库中数组的clear方法和mootools库中数组的empty方法均采用此种方式来实现数组清空。
重新赋值为空数组
第三种方法是直接将数组变量重新赋值为一个空数组[]。
var ary = [1,2,3,4];
ary = []; // 赋值为一个空数组以达到清空原数组
严格来说,这并非真正的清空原数组,而是将变量重新指向一个新的空数组对象。原数组若没有其他引用指向它,将等待垃圾回收机制处理。例如:
Ext库中的Ext.CompositeElementLite类的clear方法便采用了这种方式来清空元素集合。
性能对比与测试分析
方式2保留了原数组的其他属性,而方式3则没有保留。许多人认为方式2效率更高,因为它只是重新赋值了length,而方式3需要重新创建一个对象。但经过测试,结果恰恰相反,方式3的效率更高。测试代码如下:
var a = [];
for (var i=0; i< 1000000; i++){
a.push(i);
}
var start = new Date();
//a = [];
a.length = 0;
var end = new Date();
alert(end - start);
测试结果如下所示:

从上述结果可以看出,方式3的速度更快,效率更高。因此,如果不需要保留原数组的其他属性,Ext库采用的方式更值得推荐。
以上介绍了JavaScript中清空数组的三种方式,希望对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!