清空数组的方法有哪些?

1. arr = []

直接重新赋值,指向新数组(不修改原数组)。

let arr = [1, 2, 3];
arr = [];   // 原来的数组对象如果还被引用,则原数组依然存在

2. arr.length = 0

通过设置 length = 0 使原数组清空所有元素(会改变原数组,如果有其它引用也受影响)。

let arr = [1, 2, 3];
arr.length = 0;  // arr 变为 []

3. arr.splice(0, arr.length)

通过 splice 从索引 0 开始删除所有元素,效果与 length = 0 类似,但更直观。

let arr = [1, 2, 3];
arr.splice(0, arr.length);  // arr 变为 []

4. while 循环 pop

let arr = [1, 2, 3];
while (arr.length) arr.pop();

补充:

  • 如果数组有 其它引用(如函数参数、闭包中保存),推荐 arr.length = 0 或 splice(会影响所有引用);arr = [] 只断开当前变量的指向。
  • 在性能上三者差异极小,length = 0 写法最简洁。
  • 注意区分 arr.length = 0 与 delete arr:delete 只删除对象属性,并不会改变 length,更不会清空数组。