Object.freeze()冻结对象使其不可扩展、属性不可删改且不可配置,但仅浅冻结;可用Object.isFrozen()检测,需严格模式捕获错误。

Object.freeze() 是 JavaScript 中用于冻结对象的内置方法,调用后对象将变为不可扩展、不可删除属性、且所有现有属性都变为不可写、不可配置。
冻结对象的基本用法
直接传入目标对象即可:
- const obj = { a: 1, b: 2 };
- Object.freeze(obj);
- obj.a = 3; // 无效(严格模式下会抛错)
- delete obj.b; // 失败
- obj.c = 4; // 失败(不可扩展)
注意:Object.freeze() 是浅冻结
它只冻结对象自身第一层属性,不递归冻结嵌套对象:
- const obj = { a: 1, nested: { x: 10 } };
- Object.freeze(obj);
- obj.nested.x = 20; // ✅ 仍可修改
- 如需深度冻结,需手动递归调用 Object.freeze() 或使用第三方库(如
deep-freeze)。
如何判断一个对象是否已被冻结
可用 Object.isFrozen() 检测:
立即学习“Java免费学习笔记(深入)”;
- Object.isFrozen(obj); // true 或 false
- 注意:空对象或不可扩展但未冻结的对象返回
false;只有满足「不可扩展 + 所有属性不可配置 + 所有数据属性不可写」才返回true。
常见误区与建议
- 冻结后尝试修改属性,在非严格模式下静默失败,严格模式下抛
TypeError,建议开发时启用严格模式便于调试。 - 冻结不会影响原型链上的属性,仅作用于对象自身的自有属性。
- 若需创建一个初始就冻结的对象,可结合 Object.freeze(Object.assign({}, ...)) 或展开语法:
Object.freeze({ ...original })。










