[TOC] #### 1. 前言 --- 当面试被问到 JS 如何清空一个数组,有哪些方法以及这些方法之间有什么区别,主要考察以下几个方面: + 对 JS 数组操作 API 的熟悉程度,理解不同方法的语法和使用方式 + 区分重新赋值和修改原数组的区别,理解变量引用与数组对象的关系 + 不同方法的性能差异,选择最优解的能力 #### 2. 清空数组 --- ##### 重新赋值 听到清空数组,你首先想到的可能是直接给变量赋值一个新的空数组 ```javascript let arr = [1, 2, 3] // 这种方式最简单,但本质上不是清空数组,而是更新变量的引用地址 arr = [] ``` 如果旧数组还赋值给了其他变量,那么其他变量的数组不会被清空,也就是原数组的内存空间并不会被释放 ```javascript let arr = [1, 2, 3] let list = arr arr = [] console.log(arr); // [] console.log(list); // [1, 2, 3] ``` ##### pop 方法 通过循环调用 pop 方法,逐个删除元素。它的复杂度较高,性能较差 ```javascript let arr = [1, 2, 3] while (arr.length) { arr.pop() } console.log(arr); // [] ``` ##### splice 方法 可以通过 splice() 方法删除数组中的所有元素,并将删除的元素作为返回值,它的复杂度较高,性能较差 ```javascript let arr = [1, 2, 3] arr.splice(0, arr.length) console.log(arr); // [] ``` ##### 设置 length 为 0 最好的方式是通过设置数组长度为 0,直接清空数组内容 ```javascript let arr = [1, 2, 3] arr.length = 0 console.log(arr); // [] ``` #### 3. 最佳选择 --- 在清空 JavaScript 数组的几种常用方法中,设置数组长度为 0 通常被认为是最优选择 这种方法的优势包括: + 简洁高效:一行代码即可完成操作 + 性能最佳:直接修改数组内部属性,无需调用函数或循环操作 + 保持引用:清空后数组仍指向原内存地址,适合需要保持变量引用的场景 相比之下,其他方法如 `arr.splice(0, arr.length)` 虽然也能达到相同的效果,但因涉及函数调用而性能较差 而重新赋值为 `[]` 的方式虽然很简单,但是会创建新的数组对象,会影响引用关系 所以,大多数情况下,推荐使用 `arr.length = 0` 这种方式来清空数组