writable为false时,严格模式赋值报typeerror,非严格模式静默失败;仅限制=赋值,不阻止defineproperty修改(configurable为true时);与const声明作用层面不同。

当属性的 writable 描述符设为 false 时,赋值行为在严格模式与非严格模式下表现明显不同:严格模式会立即报错,非严格模式则静默失败——不报错,也不生效。
严格模式下:赋值直接抛出 TypeError
只要启用了 "use strict",对 writable: false 的属性执行赋值(如 obj.prop = newValue),JavaScript 引擎会立刻抛出错误:
TypeError: Cannot assign to read only property 'prop' of object '#<object>'</object>- 错误发生在赋值语句执行时,便于快速定位问题
- 这种“显式报错”是严格模式的核心设计之一,避免静默错误掩盖逻辑缺陷
非严格模式下:赋值不生效但无提示
在默认(非严格)环境下,同样的赋值操作不会触发任何错误,也不会改变属性值:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
obj.prop = 100执行后,obj.prop仍保持原值 - 控制台不输出警告或错误,容易造成调试困惑
- 这种“静默失败”是早期 JavaScript 宽容性的体现,但不利于健壮性保障
writable 限制只针对直接赋值,不阻止 defineProperty
writable: false 并不锁死整个描述符配置,它仅约束 = 赋值操作:
- 仍可通过
Object.defineProperty(obj, 'prop', { value: 200 })修改值——前提是configurable: true - 若
configurable: false,则连defineProperty改值也会失败 - 检测当前状态可用
Object.getOwnPropertyDescriptor(obj, 'prop')
与 const 声明的本质区别
writable: false 是对象属性层面的只读控制,和 const 声明有根本差异:
-
const x = {}禁止的是变量绑定被重新赋值,但x指向的对象内部属性仍可修改 -
Object.defineProperty(obj, 'p', { writable: false })禁止的是该属性值被覆盖,不影响其他属性或对象扩展 - 两者作用域、机制、可撤销性都不同,不能互相替代
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










