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

JavaScript 提供了多种方式来限制对象的修改,其中 Object.freeze() 和 Object.seal() 是两个重要的方法。它们都能防止对象被随意更改,但作用程度不同。
Object.seal() 方法会封闭一个对象,阻止新属性被添加,同时阻止已有属性被删除。但允许修改现有属性的值。
示例:
<pre class="brush:php;toolbar: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() 比 seal 更严格,它不仅阻止添加和删除属性,还禁止修改任何现有属性的值。
立即学习“Java免费学习笔记(深入)”;
示例:
<pre class="brush:php;toolbar:false;">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 }
| 操作 | 普通对象 | Object.seal() | Object.freeze() |
|---|---|---|---|
| 添加属性 | ✅ | ❌ | ❌ |
| 删除属性 | ✅ | ❌ | ❌ |
| 修改属性值 | ✅ | ✅ | ❌ |
| 修改属性描述符 | ✅ | ❌ | ❌ |
注意:两者都只作用于对象自身,不处理深层嵌套属性。若需深度冻结,需递归调用 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号