configurable 是 writable 是否可修改的开关:configurable: true 时 writable 可双向切换;configurable: false 时 writable 只能由 true 改为 false,不可逆转,且其他描述符亦不可改。

configurable 是 writable 能否“翻盘”的开关。
configurable: true 时,writable 可进可退
只要 configurable 为 true,哪怕当前 writable 是 false,你仍能用 Object.defineProperty 把它改回 true,之后就能正常赋值:
- 先锁定:Object.defineProperty(obj, 'x', { value: 1, writable: false, configurable: true })
- 再解锁:Object.defineProperty(obj, 'x', { writable: true }) → 成功
- 最后赋值:obj.x = 2 → 生效
configurable: false 时,writable 被“焊死”
一旦 configurable 设为 false,writable 就只能单向降级(true → false),不可恢复:
- writable: true → 可改为 false ✅
- writable: false → 不能再改为 true ❌(报 TypeError)
- 其他描述符(enumerable、configurable 自身)也一律禁止修改 ❌
默认值差异决定初始权限
不同创建方式下,configurable 默认值不同,直接影响后续能否调整 writable:
立即学习“Java免费学习笔记(深入)”;
- 对象字面量属性(如 const obj = { x: 1 })→ configurable 默认为 true
- Object.defineProperty 显式添加且未指定 configurable → 默认为 false
- var 声明的全局变量 → 在全局对象上表现为 configurable: false
writable 的实际效果还依赖执行模式
writable: false 本身不阻止读取或删除(删除由 configurable 控制),只约束赋值行为:
- 非严格模式:obj.x = 5 静默失败,obj.x 仍为原值
- 严格模式:同上操作直接抛 TypeError
- delete obj.x 是否成功,只看 configurable,和 writable 无关


















