configurable 为 false 后不可撤回,属性永久锁定:无法删除、修改特性或切换属性类型,仅允许将 writable 从 true 改为 false;应谨慎设置,优先使用 Object.freeze() 等替代方案。

不能撤回。一旦将属性的 configurable 设置为 false,该属性的可配置性就永久锁定,无法通过任何方式恢复为 true。
configurable 为 false 后的限制
当一个属性的 configurable: false 时,以下操作均被禁止:
- 无法删除该属性(
delete obj.prop返回false) - 无法修改其
configurable、enumerable或writable特性(调用Object.defineProperty会抛出 TypeError) - 无法将其从数据属性改为访问器属性,或反之
唯一允许的修改是 writable(有限条件下)
如果属性当前是数据属性(即具有 value),且 configurable 为 false,你仍可将 writable 从 true 改为 false(但不可逆向操作):
const obj = {};
Object.defineProperty(obj, 'x', {
value: 1,
writable: true,
configurable: false
});
// ✅ 允许:降级为只读
Object.defineProperty(obj, 'x', { writable: false });
// ❌ 报错:无法恢复 writable 或修改 configurable
Object.defineProperty(obj, 'x', { writable: true }); // TypeError
Object.defineProperty(obj, 'x', { configurable: true }); // TypeError
如何避免误操作
若需保留后续调整空间,应谨慎设置 configurable: false。常见安全做法包括:
立即学习“Java免费学习笔记(深入)”;
- 仅在确定属性“冻结”后不再变更时才设为
false - 优先使用
Object.freeze()冻结整个对象(它内部对每个自有属性设configurable: false和writable: false) - 如需部分控制,可用
Object.preventExtensions()或Object.seal()替代直接操作 descriptor
不复杂但容易忽略:configurable 是单向开关,设计上就是不可逆的。


















