Object.isFrozen(obj)、Object.isSealed(obj)、Object.isExtensible(obj)可依次准确判断对象的冻结、密封和可扩展状态,无需猜测或赋值试探,且三者构成递进防护层级。

直接用对应的方法判断即可,不需要猜测或尝试赋值。JavaScript 提供了原生、可靠的检测 API,只需一行代码就能明确知道对象当前处于哪种防护状态。
用 Object.isFrozen 判断是否冻结
冻结对象意味着所有属性不可写、不可配置、不可删除,且对象不可扩展。检测方式非常简单:
-
Object.isFrozen(obj) 返回 true 表示对象已被
Object.freeze()处理过 - 即使对象是空的、或者只有一层属性,该方法也能准确识别
- 注意:冻结是浅冻结——它不递归冻结嵌套对象,只作用于自身属性
用 Object.isSealed 判断是否密封
密封对象比冻结宽松一点:属性值仍可修改,但不能增删属性、也不能改属性描述符(如 writable/configurable)。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
Object.isSealed(obj) 返回 true 表示对象已被
Object.seal()处理 - 密封对象一定是不可扩展的(
Object.isExtensible(obj) === false),但反过来不成立 - 如果一个对象被
seal过,再调用freeze,isFrozen才会返回 true
顺便验证是否可扩展
可扩展性是更基础的状态,冻结和密封都以它为前提。提前确认有助于理解整体防护层级:
- Object.isExtensible(obj) 返回 false 是密封或冻结的必要条件
- 若返回 true,说明对象既没被密封也没被冻结,还能自由添加属性
- 仅靠不可扩展无法断定是否密封——必须配合检查所有属性的
configurable是否全为 false
实际检测建议
日常调试或工具函数中,可以组合使用这三个方法快速定位状态:
- 先查
isFrozen:最严格,满足就不用继续 - 再查
isSealed:次严格,适用于需保留属性值可变性的场景 - 最后查
isExtensible:用于区分“普通对象”和“已设防对象” - 避免手动尝试赋值或删属性来“试探”,既不安全也不准确

















