Object.seal禁止增删属性但可修改值,Object.freeze则完全锁定对象;两者均为浅冻结,嵌套对象需递归处理。

Object.freeze 和 Object.seal 都用于限制对象的修改,但它们的作用程度不同。理解两者的区别有助于在需要控制对象可变性时做出合适选择。
调用 Object.seal(obj) 后,对象的属性无法被添加或删除,但已有属性的值仍可修改。属性的描述符(如 writable、configurable)也会受到限制。
const obj = { name: "Alice" };
Object.seal(obj);
obj.name = "Bob"; // ✅ 允许
obj.age = 25; // ❌ 无效(非严格模式下静默失败)
delete obj.name; // ❌ 无效
Object.freeze(obj) 比 seal 更严格。它不仅禁止增删属性,还禁止修改任何已有属性的值。
const obj = { name: "Alice" };
Object.freeze(obj);
obj.name = "Bob"; // ❌ 无效(严格模式报错)
obj.age = 25; // ❌ 无效
delete obj.name; // ❌ 无效
需要注意的是,seal 和 freeze 都是浅操作。如果对象的属性是引用类型(如对象或数组),其嵌套内容仍可能被修改。
立即学习“Java免费学习笔记(深入)”;
const obj = { user: { name: "Alice" } };
Object.freeze(obj);
obj.user.name = "Bob"; // ✅ 成功!内部对象未被冻结
若要彻底冻结,需递归调用 freeze 或使用深冻结工具函数。
基本上就这些。seal 保留属性可写性,freeze 则全面锁定。根据需求选择即可。以上就是JavaScript 的 Object.freeze 与 Object.seal 在限制对象修改时有何不同?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号