当 configurable: false 时,属性无法被 delete 操作移除,且禁止修改描述符、转换属性类型或恢复 configurable 为 true;该设置必须显式声明且不可逆。

当 configurable: false 时,属性无法被 delete 操作移除——这是最直接、最可靠的删除防护机制。
configurable: false 直接阻止 delete 操作
只要属性的 configurable 描述符为 false,无论是否在严格模式下,delete obj.prop 都会失效:
- 非严格模式:返回
false,不报错,但属性依然存在 - 严格模式:立即抛出
TypeError,中断执行 - 该限制作用于属性本身定义层面,与对象是否可扩展无关
它不只是防删除,还锁死描述符变更
configurable: false 的本质是“冻结属性定义”,因此以下操作全部被禁止:
- 用
Object.defineProperty()修改enumerable、writable(除非从true → false)、configurable自身 - 把数据属性(含
value)和访问器属性(含get/set)相互转换 - 任何试图将
configurable改回true的尝试都会失败
设置方式必须显式且不可逆
不能依赖默认值或隐式赋值,必须主动调用 Object.defineProperty 并明确声明:
- 对象字面量写法(如
obj.x = 1)创建的属性,默认configurable: true,可删 -
Object.defineProperty(obj, 'key', { value: ..., configurable: false })是唯一可靠方式 - 一旦设为
false,就彻底不可逆——没有 API 能把它改回来
与其他描述符协同控制行为边界
configurable: false 不等于“完全只读”,它只管定义,不管值:
- 若
writable: true,仍可赋新值:obj.prop = 'new' - 若
writable: false,值不可改,加上configurable: false,就接近常量语义 - 若
enumerable: false,该属性不会出现在for...in或Object.keys()中,但访问依然有效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











