const声明的变量绑定的引用地址不可变,而非值不可变;基本类型因自身不可变故const效果直观,对象/数组可用Object.freeze()实现浅冻结。

const 声明的变量,其“不可重新赋值”的特性,指的是**绑定的引用地址不能改变**,而不是对象或数组的内容不可变。这是理解 const 行为的关键。
const 保证的是“引用不可变”,不是“值不可变”
当你用 const 声明一个对象或数组时,你不能把变量指向另一个新对象,但可以修改该对象内部的属性或数组元素:
- ✅ 允许:const obj = { a: 1 }; obj.a = 2; // 修改属性
- ✅ 允许:const arr = [1]; arr.push(2); // 修改数组内容
- ❌ 不允许:const obj = {}; obj = { b: 2 }; // 报错:Assignment to constant variable
- ❌ 不允许:const arr = []; arr = [1]; // 同样报错
想真正冻结对象内容?配合 Object.freeze()
如果需要让对象及其嵌套属性都不可修改(浅冻结),可结合 Object.freeze():
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- const user = Object.freeze({ name: "Alice", age: 30 });
- user.name = "Bob"; // 静默失败(严格模式下报错)
- user.job = "Engineer"; // 同样无效
注意:Object.freeze 是浅冻结,对嵌套对象需手动递归冻结,或使用第三方库(如 immer 的 freeze 模式)。
立即学习“Java免费学习笔记(深入)”;
基本类型天然“值不可变”,const 效果最直观
字符串、数字、布尔、symbol、bigint 等基本类型本身不可变,所以 const 声明后既不能重赋值,也不能“修改值”:
- const PI = 3.14159;
- PI = 3.14; // 报错 —— 基本类型无法就地修改,只能重赋值,而 const 禁止重赋值
常见误用提醒
- 不要以为 const obj = {} 就是“常量对象”——它只是常量引用
- 避免在循环中用 const 声明会被重复赋值的变量(应改用 let)
- 推荐优先用 const,仅在确实需要重新赋值时才用 let(提升代码可读性和安全性)

















