configurable: false 不影响属性值更新,仅限制描述符修改;能否赋值完全由 writable 决定:writable: true 时可赋值,false 时不可赋值。

当 configurable: false 时,属性值能否更新,**完全取决于 writable 的值,与 configurable 本身无关**。也就是说,configurable 不管“能不能改值”,只管“能不能动定义”。
configurable: false 不影响赋值行为
只要 writable: true,哪怕 configurable: false,属性值仍可正常修改:
-
obj.prop = newValue会成功执行 - 在非严格模式下静默生效;严格模式下也允许(不报错)
- 这和是否能删属性、是否能改描述符毫无关系
writable 才真正决定值是否可变
writable 是控制赋值操作的开关:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
writable: true→ 可赋新值(无论configurable是 true 还是 false) -
writable: false→ 赋值无效:非严格模式静默失败,严格模式抛TypeError -
configurable: false+writable: false组合后,属性就既不能删、不能改描述符,也不能改值,接近“常量”效果
configurable: false 对 writable 的限制是单向的
它只冻结描述符的修改权限,但保留一个例外:
立即学习“Java免费学习笔记(深入)”;
- 若当前
writable: true,可调用Object.defineProperty把它改为false - 但一旦
writable: false,就再也不能改回true(因为configurable: false禁止反向操作) - 换句话说:
configurable: false允许“锁死 writable”,但不允许“解锁 writable”
常见误解澄清
很多人误以为 configurable: false 就等于“属性不可变”,其实不是:
- 它不阻止
obj.x = 123,除非writable: false - 它不阻止
obj.x++或obj.x += 1,这些本质仍是赋值操作 - 它也不影响对象内部状态变化,比如
obj.arr.push(1)(因为修改的是数组内容,不是属性值本身)

















