以下是重构后的答案:
JavaScript中清空数组的方法有以下几种:
1. 使用splice方法
```javascript
var ary = [1, 2, 3, 4];
ary.splice(0, ary.length);
console.log(ary); // 输出 [],空数组,即被清空了
```
这种方式会直接修改原数组。
2. 将length属性赋值为0
虽然在Java等其他语言中这种方式会报错,但在JavaScript中可以实现清空数组的目的。
```javascript
var ary = [1, 2, 3, 4];
ary.length = 0;
console.log(ary); // 输出 [],空数组,即被清空了
```
Prototype库中的clear方法和mootools库中的empty方法使用这种方式清空数组。
3. 将数组赋值为[](不保留原数组的其他属性)
```javascript
var ary = [1, 2, 3, 4];
ary = []; // 赋值为一个空数组以达到清空原数组
Ext库Ext.CompositeElementLite类的 clear 方法使用这种方式清空。
```
方式2保留了数组的其他属性,而方式3则没有。很多人认为方式2的效率较高,因为仅仅是给length重新赋值了,而方式3则需要重新创建对象。然而经过测试,实际上方式3的效率更高。
测试代码:
```javascript
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);
```
测试结果:
- IE6、IE7、IE8、IE9
- Firefox、Safari、Chrome
- a.length=0:94毫秒
- a=[]:0毫秒
从测试结果可以看出,方式3(将数组赋值为[])的效率更高。如果不保留原数组的其他属性,Ext采用的方式更值得推荐。