configurable: false 不影响属性值是否可赋值,仅禁止删除属性、修改描述符及转换属性类型;能否改值取决于 writable 状态,且 writable 可在 configurable: false 时由 true 单向改为 false。

configurable: false 本身不影响属性值的重新赋值——能否改值,只取决于 writable 的状态,和 configurable 是否为 false 没有直接关系。
configurable: false 不锁值,只锁“定义”
它的作用范围很明确:禁止删除该属性、禁止修改其描述符(如 enumerable、writable、configurable 自身)、禁止数据属性与访问器属性互相转换。但它不干预属性值本身的读写行为。
- 如果
writable: true,即使configurable: false,仍可正常赋值:obj.prop = 'new' - 如果
writable: false,则赋值无效(非严格模式静默失败,严格模式报TypeError),此时configurable: false的作用是“加固”——让writable状态不可逆转 - 常见误区:以为
configurable: false就等于“常量”。其实不是,必须配合writable: false才能真正防止值被改
为什么 writable 可以在 configurable: false 时被“降级”
这是一个关键例外:当 configurable 为 false 时,Object.defineProperty 仍允许把 writable: true 改为 false,但反过来(false → true)绝对禁止。
- 这是 JS 规范特意保留的“单向加固”能力,用于在不破坏配置前提下进一步限制属性
- 例如:先开放赋值(
writable: true),运行中确认值稳定后,再执行一次defineProperty把writable设为false,此时因configurable: false,这个限制就永久生效了
实际应用中的典型组合
想让一个属性真正“不可删、不可配、不可改值”,需同时设置:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
configurable: false—— 锁死定义,防止删除或改描述符 -
writable: false—— 锁死值,防止重新赋值 -
enumerable: false(可选)—— 隐藏属性,不参与for...in或Object.keys()
这种组合接近常量语义,但注意:它只作用于单个属性,不影响对象整体可扩展性(对象仍可添加新属性)。
和 const 声明的本质区别
const 是绑定层级的不可重赋值,而 configurable: false + writable: false 是对象属性层级的不可变控制。
-
const obj = { x: 1 };:不能把obj指向新对象,但obj.x = 2依然有效(除非x属性本身被设为writable: false) - 只有给对象属性显式配置
writable: false和configurable: false,才能阻止对它的值修改和定义变更

















