如何通过 Object.isFrozen 判断全局单例是否进入只读安全状态?
- 内容介绍
- 相关推荐
本文共计647个文字,预计阅读时间需要3分钟。
`Object.isFrozen` 不能用来判断全局单例状态是否处于‘只读安全期’——它只能检测一个对象是否被 `frozen`(即不可扩展、不可配置、所有属性不可写)。但只读安全期是一个业务语义概念,不是 JavaScript 引擎定义的运行时状态。
Object.isFrozen 的真实作用
它仅检查对象是否满足以下全部条件:
- Object.isExtensible(obj) === false
- 所有自有属性的
configurable为false - 所有自有数据属性的
writable为false
注意:它不关心对象是否被“逻辑上冻结”,也不感知模块初始化阶段、是否完成配置、是否有并发写入风险等。即使一个单例对象已被 freeze,若其属性值是引用类型(如数组、嵌套对象),这些内部值仍可被修改。
为什么不能直接用于“只读安全期”判定
“只读安全期”通常指:单例已完成初始化、外部不再允许修改、且当前处于稳定服务阶段。
本文共计647个文字,预计阅读时间需要3分钟。
`Object.isFrozen` 不能用来判断全局单例状态是否处于‘只读安全期’——它只能检测一个对象是否被 `frozen`(即不可扩展、不可配置、所有属性不可写)。但只读安全期是一个业务语义概念,不是 JavaScript 引擎定义的运行时状态。
Object.isFrozen 的真实作用
它仅检查对象是否满足以下全部条件:
- Object.isExtensible(obj) === false
- 所有自有属性的
configurable为false - 所有自有数据属性的
writable为false
注意:它不关心对象是否被“逻辑上冻结”,也不感知模块初始化阶段、是否完成配置、是否有并发写入风险等。即使一个单例对象已被 freeze,若其属性值是引用类型(如数组、嵌套对象),这些内部值仍可被修改。
为什么不能直接用于“只读安全期”判定
“只读安全期”通常指:单例已完成初始化、外部不再允许修改、且当前处于稳定服务阶段。

