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

JavaScript 中的 对象密封(sealing) 主要是为了在不冻结对象的前提下,防止意外修改对象的结构——也就是禁止新增或删除属性,同时保留对已有属性值的修改能力。
调用 Object.seal(obj) 后,对象会进入“密封”状态,以下操作会被阻止:
obj.newProp = 1 无效,严格模式下抛出错误)delete obj.existingProp 失败,严格模式下报错)configurable: false,所以也不能再用 Object.defineProperty 改 descriptor 中的 configurable 或 writable)但注意:已存在的可写属性(writable: true)的值仍可修改,比如 obj.name = "Alice" 是允许的。
三者是递进关系,限制力度逐步增强:
立即学习“Java免费学习笔记(深入)”;
Object.preventExtensions()):只禁新增,允许删、允许改值、允许改 descriptorObject.seal()):禁新增 + 禁删除,但仍允许改已有属性的值(只要 writable)Object.freeze()):禁新增 + 禁删除 + 禁改值(所有属性设为 writable: false),是最严格的保护密封适合那些“结构应稳定、但内容可变”的对象,比如配置项、常量集合、模块导出对象:
config.baseUrl 被删导致运行时错误)它比 freeze 更灵活,比默认对象更安全,是一种轻量级的结构防护。
基本上就这些——密封不是为了彻底锁死,而是守住“形状”,放开“内容”。
以上就是为什么javascript需要对象密封_它限制哪些操作?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号