const声明的数组不可重新赋值但可修改内容,因其限制的是变量绑定而非对象内部状态;push、unshift、splice及索引赋值均合法,但arr = [...]等重赋值操作会报错。

const 声明的数组本身不可重新赋值,但数组内容可以修改,所以能正常追加元素。
为什么 const 数组可以 push、push 等操作?
const 限制的是变量绑定(即不能把变量指向另一个新数组),而不是数组内部的可变性。数组是引用类型,const 只冻结了“这个变量名始终指向这个数组对象”,不冻结数组对象自身的属性和方法。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
因此 push()、unshift()、splice()、直接通过索引赋值(如 arr[3] = 'x')都合法。
常用追加方法(全部可用)
-
arr.push(item):末尾添加一个或多个元素 -
arr.unshift(item):开头添加一个或多个元素 -
arr.splice(arr.length, 0, ...items):在末尾插入(等价于 push) -
arr = [...arr, item]:❌ 错误!这会重新赋值,违反 const 规则
注意不要踩的坑
- 不能写
arr = arr.concat(item)或arr = [...arr, item]—— 这是在给 const 变量重新赋值 - 如果想保持不可变语义(比如函数式编程习惯),应改用
const newArr = [...arr, item],但此时用的是新变量,原数组不变 - 若需完全冻结数组及其内容,要用
Object.freeze(arr)(但仅浅冻结,嵌套对象仍可变)
示例代码
const list = ['a', 'b'];<br>list.push('c'); // ✅ 合法<br>list[3] = 'd'; // ✅ 合法<br>console.log(list); // ['a', 'b', 'c', 'd']<br><br>// ❌ 下面两行都会报错:Assignment to constant variable.<br>// list = ['x', 'y'];<br>// list = list.concat('z');
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










