const声明的是不可重新赋值的绑定,而非不可变值;可修改对象属性但不能重新赋值,需用Object.freeze()实现浅冻结,深冻结需递归或第三方库。

const 声明的不是“不可变的值”,而是“不可重新赋值的绑定”。这意味着你不能把用 const 声明的变量指向另一个内存地址,但若它指向的是一个对象(包括数组、函数、日期等引用类型),对象内部的属性依然可以被修改。
const 声明对象后能改属性,但不能重新赋值
例如:
const user = { name: 'Alice', age: 30 };
user.name = 'Bob'; // ✅ 允许:修改对象属性
user.age = 31; // ✅ 允许
user = { name: 'Charlie' }; // ❌ 报错:Cannot assign to const variable
常见可修改的操作(针对 const 对象)
- 添加或更新属性:
obj.newProp = value或obj['key'] = value - 删除属性:
delete obj.prop - 修改数组元素:
arr[0] = 'new'、arr.push()、arr.pop() - 调用会改变自身的方法:
arr.sort()、obj.someMethodThatMutates()
想真正“冻结”对象?用 Object.freeze()
Object.freeze() 可阻止新增、删除、修改自有属性(浅冻结):
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
const user = Object.freeze({ name: 'Alice', profile: { city: 'Beijing' } });
user.name = 'Bob'; // ❌ 无效(静默失败,严格模式下报错)
user.profile.city = 'Shanghai'; // ✅ 仍可改!因为 freeze 是浅的
如需深冻结,需手动递归处理嵌套对象,或借助第三方库(如 deep-freeze)。
什么时候该用 const?
- 声明不打算重新赋值的变量(推荐作为默认选择)
- 导出模块常量:
export const API_URL = 'https://api.example.com'; - 配置对象、默认参数、DOM 元素引用等

















