对象密封限制新增属性、删除属性和重新配置属性,但允许修改已有可写属性的值;它比不可扩展多禁删除,比冻结少禁改值,适用于结构稳定而内容需可变的场景。

JavaScript 中的 对象密封(sealing) 主要是为了在不冻结对象的前提下,防止意外修改对象的结构——也就是禁止新增或删除属性,同时保留对已有属性值的修改能力。
密封对象限制哪些操作?
调用 Object.seal(obj) 后,对象会进入“密封”状态,以下操作会被阻止:
- 不能添加新属性(
obj.newProp = 1无效,严格模式下抛出错误) - 不能删除已有属性(
delete obj.existingProp失败,严格模式下报错) - 不能重新配置属性(即不能改
configurable: false,所以也不能再用Object.defineProperty改 descriptor 中的configurable或writable)
但注意:已存在的可写属性(writable: true)的值仍可修改,比如 obj.name = "Alice" 是允许的。
和冻结(freeze)、不可扩展(preventExtensions)的区别
三者是递进关系,限制力度逐步增强:
立即学习“Java免费学习笔记(深入)”;
标签: javascript java 区别 为什么
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~