Object.freeze() 和 Object.seal() 是 JavaScript 中用于控制对象属性的两个方法,它们有一些相似之处,但也有重要的区别。
Object.freeze()冻结对象:Object.freeze() 方法会冻结一个对象。冻结对象后,对象的属性不能被添加、删除或修改。此外,对象的属性描述符也不能被更改。深度冻结:Object.freeze() 只会冻结对象的第一层属性。如果对象的属性是对象,那么这些嵌套对象不会被自动冻结。要实现深度冻结,需要递归地对每个嵌套对象调用 Object.freeze()。不可扩展:冻结的对象也是不可扩展的,即不能添加新的属性。示例:
const obj = {
prop: 42,
nested: {
nestedProp: 100
}
};
Object.freeze(obj);
// 尝试修改属性
obj.prop = 33; // 静默失败,严格模式下会抛出 TypeError
obj.newProp = 55; // 静默失败,严格模式下会抛出 TypeError
delete obj.prop; // 静默失败,严格模式下会抛出 TypeError
// 嵌套对象不会被冻结
obj.nested.nestedProp = 200; // 成功 Object.seal()密封对象:Object.seal() 方法会密封一个对象。密封对象后,对象的属性不能被添加或删除,但可以修改现有属性的值。不可扩展:密封的对象也是不可扩展的,即不能添加新的属性。属性描述符:密封对象的属性描述符可以被更改,只要这些更改不涉及添加或删除属性。示例:
const obj = {
prop: 42,
nested: {
nestedProp: 100
}
};
Object.seal(obj);
// 尝试修改属性
obj.prop = 33; // 成功
obj.newProp = 55; // 静默失败,严格模式下会抛出 TypeError
delete obj.prop; // 静默失败,严格模式下会抛出 TypeError
// 嵌套对象不会被密封
obj.nested.nestedProp = 200; // 成功 总结Object.freeze():冻结对象,使其属性不可添加、删除或修改,且属性描述符不可更改。Object.seal():密封对象,使其属性不可添加或删除,但可以修改现有属性的值,且属性描述符可以更改。两者都会使对象不可扩展,即不能添加新的属性。
网友回复
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


