Object.freeze()可浅冻结const对象,使其自身属性不可增删改;const仅防止变量重赋值,不阻止对象内部修改;需立即调用且注意嵌套对象需手动深度冻结。

用 Object.freeze() 可以冻结 const 声明的对象,使其自身属性不可添加、删除或修改(浅冻结)。
const 和 Object.freeze 的区别
const 只保证变量绑定不可重新赋值,不阻止对象内部变化;Object.freeze() 才真正锁定对象自身的可写性、可配置性和可枚举性。
-
const obj = { a: 1 };→ 后续obj = {}报错,但obj.a = 2合法 -
Object.freeze(obj)→ 再执行obj.a = 2在严格模式下报错,非严格模式静默失败
如何正确冻结 const 对象
必须在声明后立即调用 Object.freeze(),且注意它只冻结第一层:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- ✅ 正确写法:
const obj = Object.freeze({ a: 1, b: { c: 2 } }); - ⚠️ 注意:嵌套对象
b未被冻结,obj.b.c = 3仍可成功 - ? 如需深度冻结,需手动递归调用
Object.freeze或使用工具函数
验证是否冻结成功
可用 Object.isFrozen() 检查:
立即学习“Java免费学习笔记(深入)”;
-
Object.isFrozen(obj) === true表示已冻结 - 冻结后尝试
obj.newProp = 'x'或delete obj.a都无效 - 属性描述符变为
{ writable: false, configurable: false, enumerable: true }
冻结数组和类实例
数组也是对象,同样适用:
-
const arr = Object.freeze([1, 2, 3]);→arr.push(4)失败,arr[0] = 9失败 - 类实例也可冻结:
const inst = Object.freeze(new MyClass());,其自有属性不可变 - 注意:原型上的方法和属性不受影响,仅实例自身属性被锁定

















