密封对象是禁止添加和删除属性但允许修改已有属性值的对象,通过Object.seal()实现,其configurable为false而writable可能仍为true,可用Object.isSealed()检测。

JavaScript 中密封一个对象、阻止添加新属性,用 Object.seal() 方法即可。
什么是密封对象(sealed object)?
密封后的对象具有以下特性:
- 不能添加新属性
- 不能删除已有属性
- 已有属性的 值可以修改(除非该属性本身是只读的)
- 已有属性的 描述符可配置性(configurable)被设为 false,但 writable 可能仍为 true
如何使用 Object.seal()?
直接传入目标对象,返回该对象本身(原地修改):
const obj = { a: 1 };
Object.seal(obj);
obj.b = 2; // 静默失败(非严格模式),或抛出 TypeError(严格模式)
delete obj.a; // 静默失败 / TypeError
obj.a = 99; // ✅ 允许,值可改(除非 a 是只读属性)
密封 ≠ 冻结,别和 Object.freeze 混淆
常见误区:以为 seal 后属性就完全不可变。其实:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- Object.seal():禁止增删属性,但允许改值(writable: true 的属性)
-
Object.freeze():更严格,除了禁止增删,还把所有属性设为
writable: false,彻底不可写
如果需要完全只读,请用 Object.freeze();只需防结构变动,用 seal 更轻量。
检查对象是否已被密封
可用 Object.isSealed() 判断:
console.log(Object.isSealed(obj)); // true
console.log(Object.isSealed({})); // false

















