const声明的数组不可重新赋值但可修改内容,支持push、pop等原地操作;若需不可变语义,应使用扩展运算符或filter等返回新数组的方法。

const 定义的数组本身不能重新赋值,但数组内容可以修改。这是因为 const 限制的是变量绑定(即不能把变量指向另一个新数组),而不是数组内部的数据。所以你可以放心调用 push()、pop()、splice() 等方法来增删元素。
添加元素:用 push、unshift 或 splice
这些方法会直接修改原数组:
-
push(...items):在末尾添加一个或多个元素 -
unshift(...items):在开头添加一个或多个元素 -
splice(start, deleteCount, ...items):在指定位置插入(或替换)元素
例如:
const arr = [1, 2]; arr.push(3); // [1, 2, 3] arr.unshift(0); // [0, 1, 2, 3] arr.splice(2, 0, 'a', 'b'); // [0, 1, 'a', 'b', 2, 3]
删除元素:用 pop、shift 或 splice
同样直接修改原数组:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
pop():删除最后一个元素 -
shift():删除第一个元素 -
splice(start, deleteCount):从指定位置删除指定数量的元素 -
filter()不会修改原数组,但常用于生成新数组(需配合重新赋值,这时就不能用 const 了)
例如:
const arr = [0, 1, 'a', 'b', 2, 3]; arr.pop(); // [0, 1, 'a', 'b', 2] arr.shift(); // [1, 'a', 'b', 2] arr.splice(1, 2); // [1, 2]
注意不可修改的情况
以下操作会报错,因为它们试图改变变量绑定本身:
-
arr = [4, 5];❌(重新赋值不允许) -
arr = arr.concat([4]);❌(返回新数组,但不能赋给 const 变量)
如果确实需要“不可变”语义,可用 Object.freeze(arr) 冻结数组(但冻结后连 push、pop 都会静默失败或报错,取决于严格模式)。
想保持不可变?用函数式方法创建新数组
如果逻辑上希望保留原数组不变,推荐用不修改原数组的方法,再用 let 接收结果(或配合其他状态管理方式):
- 添加:
[...arr, newItem]或arr.concat(newItem) - 删除(如去掉第 i 项):
[...arr.slice(0, i), ...arr.slice(i + 1)] - 过滤:
arr.filter(x => x !== target)
注意:这些操作都返回新数组,不能直接用于 const 原变量,但可赋给新的 const 或 let 变量。

















