configurable 是属性最底层的开关,设为 false 后无法删除属性、不可修改 enumerable 和 configurable 本身,仅允许将 writable 从 true 改为 false;writable 可逆需 configurable 为 true,否则固化。

configurable 控制属性是否能被删除、是否能修改其描述符(如 writable、enumerable、configurable 本身),是对象属性最底层的“开关”之一。
configurable: false 后无法删除属性
一旦将属性的 configurable 设为 false,就再也不能用 delete 删除该属性:
const obj = {};
Object.defineProperty(obj, 'name', {
value: 'Alice',
configurable: false
});
delete obj.name; // 返回 false(严格模式下会报错)
console.log(obj.name); // 'Alice',依然存在
configurable: false 后无法修改属性描述符
此时连 Object.defineProperty 都受限:不能改 writable(除非当前 writable 是 true,可改为 false)、不能改 enumerable、也不能把 configurable 再设回 true:
- 想把
writable: true改成false✅ 允许(即使 configurable 为 false) - 想把
writable: false改成true❌ 不允许 - 想改
enumerable或再次调用defineProperty设configurable: true❌ 全部报错
函数参数和变量声明的隐式 configurable
通过 var 声明的变量、函数声明绑定到全局/函数作用域时,其属性默认 configurable: false(在全局对象上);而 let/const 声明的绑定不挂载到全局对象,也不可配置——这是 JS 引擎内部限制,不是 defineProperty 的结果。
立即学习“Java免费学习笔记(深入)”;
configurable 和 writable 的关系容易混淆
很多人以为 writable: false 就锁死了值,其实只要 configurable: true,仍可通过 defineProperty 把 writable 改回 true,再赋新值;但一旦 configurable: false,writable 的状态就“固化”了(只能从 true → false,不可逆)。










