configurable为false时,属性配置元信息被永久锁定:禁止delete删除、禁止用object.defineproperty修改enumerable/configurable/writable(仅writable可从true→false)、禁止数据属性与访问器属性互转。

当 JavaScript 中对象属性的 configurable 为 false 时,该属性的**配置元信息被永久锁定**,无法再通过 Object.defineProperty 或类似方式修改其描述符(descriptor)中的某些关键字段。这不是“只读”问题,而是“不可重定义”的限制。
哪些操作会被禁止
一旦属性的 configurable: false,以下行为会直接失败(严格模式下抛出 TypeError;非严格模式下静默忽略):
- 再次调用
Object.defineProperty(obj, key, {...})修改configurable、enumerable或writable(注意:writable在特定条件下仍可从true改为false) - 删除该属性(
delete obj.key返回false) - 将该属性重新定义为访问器属性(如果原先是数据属性),或反之
writable 的例外情况
configurable: false 并不完全封死 writable 的修改 —— 如果属性当前是 数据属性 且 writable: true,你仍可将其改为 writable: false(但不能再改回 true)。
例如:
obj.x = 1; Object.defineProperty(obj, 'x', { writable: false }); // ✅ 允许 Object.defineProperty(obj, 'x', { writable: true }); // ❌ TypeError(configurable 为 false 时不可逆转)如何判断一个属性是否可配置
使用 Object.getOwnPropertyDescriptor 查看属性描述符:
注意:对象自身属性才返回有效描述符;继承来的属性会返回 undefined。
常见触发 configurable: false 的场景
- 使用
Object.defineProperty显式设置{ configurable: false } - 对象被
Object.freeze()冻结后,所有自有属性的configurable和writable均变为false - 类中定义的实例方法(如
class A { method(){} })、原型上的方法,其属性默认configurable: false(这是 ES6+ 规范行为)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











