冻结 JS 对象方法
文章类型:Javascript
发布者:hp
发布时间:2025-05-14
我们在开发过程中,有时候需要对对象进行不可变性,那么怎么实现呢?
无法增/删/改属性
1:浅冻结:Object.freeze() 仅冻结对象的第一层属性
const obj = { a: 1, b: { c: 2 } };
Object.freeze(obj);
obj.b.c = 3; // 修改成功(未被冻结)
2:深冻结:需递归冻结所有层级的对象属性
function deepFreeze(obj) {
Object.freeze(obj); // 冻结当前对象
Object.keys(obj).forEach(key => {
const value = obj[key];
if (typeof value === 'object' && value !== null) {
deepFreeze(value); // 递归冻结嵌套对象
}
});
return obj;
}
const obj = { a: 1, b: { c: 2 } };
deepFreeze(obj);
obj.b.c = 3; // 修改无效
通过Object.isFrozen() 检测对象是否被冻结
console.log(Object.isFrozen(obj)); // true
1:Object.freeze()=>适用于简单对象或无需嵌套冻结,仅冻结对象自身属性
2:递归深冻结=>适用于复杂嵌套对象结构,完全冻结对象及嵌套属性