Object.isFrozen用于检测对象是否完全冻结,即不可扩展、所有自有属性不可配置且不可写;返回布尔值,只检查自身不检查原型或嵌套对象,需手动深度冻结。

Object.isFrozen 用于检测一个对象是否被完全冻结——即不可扩展、所有属性都不可配置且不可写,且其自身(不包括原型链上的属性)满足这些条件。
基本用法:直接传入对象
调用 Object.isFrozen(obj),返回布尔值:
- 返回
true:对象已冻结(不可扩展 + 所有自有属性不可配置、不可写) - 返回
false:任意一项不满足(比如可扩展、某个属性可写、或某个属性可配置)
注意:只检查对象自身,不检查原型
该方法不递归检查嵌套对象,也不检查原型链上的属性。例如:
const nested = { x: 1 };
const obj = { a: 1, b: nested };
Object.freeze(obj);
console.log(Object.isFrozen(obj)); // true(obj 自身冻结)
console.log(Object.isFrozen(nested)); // false(nested 未冻结,仍可修改)
若需深度冻结,需手动递归调用 Object.freeze,但 Object.isFrozen 不会帮你做这件事。
常见返回 false 的情况
以下任一情形都会导致 Object.isFrozen 返回 false:
- 对象仍可扩展:
Object.isExtensible(obj) === true - 存在某个自有属性是可配置的(
configurable: true) - 存在某个自有属性是可写的(
writable: true) - 对象是 null 或 undefined(会报错,需先确保是对象)
安全使用建议
实际判断前建议加类型校验:
function safeIsFrozen(obj) {
return obj !== null && typeof obj === 'object' && Object.isFrozen(obj);
}
避免对非对象类型(如字符串、数字、null)调用,否则会抛出 TypeError。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











