You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中能否解除对象属性的freeze(冻结)状态?

关于Object.freeze冻结对象的解冻问题及代码分析
  • 核心结论:一旦通过Object.freeze()冻结对象,标准JavaScript中没有官方途径可以解除冻结状态,无法在不重新创建对象的前提下恢复其可修改性。

  • Object.freeze()的特性:

    • 冻结后的对象会被标记为不可扩展,无法添加新属性;
    • 对象现有属性会被设为不可配置,无法删除或修改属性的配置规则(比如把可写属性改成不可写);
    • 对象的数据属性会被设为不可写,但如果属性值是另一个对象(嵌套对象),这个嵌套对象并不会被冻结——这就是所谓的「浅冻结」。
  • 对你提供的代码片段的分析:

var obj = Object.freeze({foo:'can you add more properties later?', bee: {ahh: '?'}});

Object.defineProperty(obj.bee,'ehh',{value: 'can you change me later?'});

这段代码能成功给obj.bee添加ehh属性,原因就是Object.freeze()只冻结了外层的obj对象,嵌套的obj.bee并没有被冻结,它依然是可扩展、可修改的。如果要让嵌套对象也不可修改,需要手动递归冻结每个嵌套层级,或者实现一个深冻结的工具函数。

内容的提问来源于stack exchange,提问作者user17386646

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:15:37