javascript中的对象冻结是什么_如何防止对象修改?

admin 百科 16
Object.freeze()冻结对象仅限自身属性,禁止增删改属性及描述符,但不递归冻结嵌套对象;需手动递归或借助库实现深冻结。

javascript中的对象冻结是什么_如何防止对象修改?-第1张图片-佛山资讯网

JavaScript 中的 对象冻结 是一种让对象“不可变”的机制,它能防止对对象本身添加、删除或修改属性,也能阻止对已有属性的值进行更改(包括属性描述符的变更)。简单说,冻结后的对象就像被锁住一样,任何试图改变它的操作都不会生效(严格模式下还会报错)。

Object.freeze() 基本用法

调用 Object.freeze(obj) 即可冻结一个对象。它会返回该对象本身(不是副本),且只影响对象自身的属性,不递归冻结嵌套对象。

  • 不能添加新属性
  • 不能删除已有属性
  • 不能修改已有属性的值(基础类型直接卡死;引用类型值不变,但其内部仍可变)
  • 不能重配置属性(如设为 writable: false 或 configurable: false 已是最终状态)

冻结 ≠ 深冻结

冻结只是浅层的。如果对象里有另一个对象,那个内层对象本身没被 freeze,依然可以修改:

const obj = { a: 1, nested: { b: 2 } };
Object.freeze(obj);
obj.a = 3;           // ❌ 无效(基础值)
obj.nested.b = 99;   // ✅ 有效!因为 nested 未被冻结

登录后复制

需要深冻结时,得手动递归调用 Object.freeze,或借助第三方库(如 deep-freeze),或用结构克隆+冻结组合方式(注意 JSON 方式会丢函数、undefined、Symbol 等)。

标签: javascript java js json

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~