Object.seal()密封对象,禁止增删属性但可修改值;Object.freeze()冻结对象,禁止增删改属性及描述符,实现完全不可变,二者均不递归处理嵌套属性。

JavaScript 提供了多种方式来限制对象的修改,其中 Object.freeze() 和 Object.seal() 是两个重要的方法。它们都能防止对象被随意更改,但作用程度不同。
Object.seal():密封对象,禁止增删属性
Object.seal() 方法会封闭一个对象,阻止新属性被添加,同时阻止已有属性被删除。但允许修改现有属性的值。
不能添加新属性 不能删除已有属性 可以修改已有属性的值 属性描述符不能更改(configurable: false)
示例:
const obj = { name: 'Alice', age: 25 };Object.seal(obj);obj.name = 'Bob'; // ✅ 允许obj.city = 'Beijing'; // ❌ 无效,无法添加delete obj.age; // ❌ 无效,无法删除console.log(obj); // { name: 'Bob', age: 25 }
Object.freeze():冻结对象,完全不可变
Object.freeze() 比 seal 更严格,它不仅阻止添加和删除属性,还禁止修改任何现有属性的值。
立即学习“Java免费学习笔记(深入)”;
不能添加新属性 不能删除已有属性 不能修改属性值(writable: false) 不能重新配置属性(如 configurable、enumerable)
示例:
const obj = { name: 'Alice', age: 25 };Object.freeze(obj);obj.name = 'Bob'; // ❌ 无效(严格模式下报错)obj.city = 'Beijing'; // ❌ 无效delete obj.age; // ❌ 无效console.log(obj); // { name: 'Alice', age: 25 }
关键区别总结
添加属性 ✅ ❌ ❌ 删除属性 ✅ ❌ ❌ 修改属性值 ✅ ✅ ❌ 修改属性描述符 ✅ ❌ ❌
注意:两者都只作用于对象自身,不处理深层嵌套属性。若需深度冻结,需递归调用 freeze。
基本上就这些。根据是否允许修改属性值来选择 seal 或 freeze。
以上就是JavaScript 对象冻结:Object.freeze() 与 Object.seal() 的区别的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1533554.html
微信扫一扫
支付宝扫一扫