当 configurable 设为 false 时,writable 只能从 true 单向降级为 false,不可逆;同时 enumerable、configurable 自身等其他描述符均不可修改,属性无法删除或转换类型,这是规范允许的唯一安全降级。

当 configurable 设为 false 时,writable 的变更会受到严格限制:它只能从 true 改为 false,但不能再改回 true,也无法再调整其他描述符。
configurable: false 后 writable 只能单向变窄
这是唯一被允许的写操作降级:
- 如果当前
writable: true,可成功执行Object.defineProperty(obj, 'prop', { writable: false }) - 如果当前
writable: false,任何试图将它设为true的操作都会抛出TypeError - 哪怕属性值本身没被锁定,只要
configurable: false,这个“解锁通道”就永久关闭了
无法再通过 defineProperty 修改其他描述符
configurable: false 不仅锁住 writable 的反向修改,还全面冻结属性配置能力:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
enumerable不能切换(无论true ↔ false) -
configurable自身不可再设为true(不可逆) - 不能把数据属性转成访问器属性,也不能反过来
- 调用
delete obj.prop会失败(非严格模式返回false,严格模式报错)
为什么 writable 能“降级”而其他不行?
这是 JavaScript 规范中明确保留的安全例外:
- 把
writable: true → false是增强防护,不破坏已有逻辑,所以允许 - 而开放写权限、改枚举性、删属性等,都可能引发意外行为,因此一律禁止
- 这种设计让库作者能在发布后进一步加固关键方法,比如先留
writable: true用于调试,上线前再锁死
实际定义时的建议
如果你需要未来调整 writable,定义属性时必须显式设置 configurable: true:
- 默认用
Object.defineProperty添加的属性,configurable是false - 所以只写
{ writable: false }就等于永久锁定,再无回旋余地 - 稳妥写法:
Object.defineProperty(obj, 'id', { value: 1, writable: false, configurable: true })
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










