Object.isFrozen()返回布尔值判断对象是否冻结,需同时满足不可扩展、所有自有属性不可配置、所有自有数据属性不可写;对原始值返回false,且不递归检测嵌套对象。

Object.isFrozen() 用来判断一个对象是否被 冻结(frozen) —— 即该对象是否不可扩展、所有属性都不可配置、且所有数据属性都不可写。
Object.isFrozen 的基本用法
它接收一个参数(任意值),返回布尔值:
✅ 返回 true 表示对象已被 Object.freeze() 冻结(或通过其他方式满足冻结条件);
❌ 返回 false 表示未冻结(包括非对象类型、空对象、只封印/只防止扩展的对象等)。
- 注意:对
null、undefined、原始值(如字符串、数字)调用,一律返回 false - 只检查“自身冻结状态”,不递归检测嵌套对象(即使外层冻结,内层仍可修改)
冻结对象的三个必要条件
Object.isFrozen(obj) 为 true 必须同时满足:
-
不可扩展:
Object.isExtensible(obj) === false -
所有自有属性不可配置:
Object.getOwnPropertyDescriptors(obj)中每个属性的configurable: false - 所有自有数据属性不可写(访问器属性不受写限制影响,但必须不可配置)
缺一不可。例如只用 Object.seal() 封印对象(不可配置 + 不可扩展,但属性仍可写),Object.isFrozen() 仍返回 false。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
常见使用场景与示例
适合在关键配置、常量对象、或深拷贝前验证是否已冻结:
立即学习“Java免费学习笔记(深入)”;
const conf = { API_URL: 'https://api.example.com' }; Object.freeze(conf); console.log(Object.isFrozen(conf)); // trueObject.preventExtensions({}); // ❌ 不冻结,Object.isFrozen 返回 falseconst arr = []; Object.freeze(arr); Object.isFrozen(arr); // true(数组也是对象)
注意事项
冻结是浅层操作:
- 若对象属性本身是另一个对象,那个对象并未自动冻结
-
Object.isFrozen({ nested: { x: 1 } })返回 false,即使外层冻结,nested.x仍可改 - 需要深度冻结时,需手动递归调用
Object.freeze,再用Object.isFrozen验证顶层

















