技术与生活 / 一篇记录
const 不变,对象为什么还能修改?
变量保存的是对对象的引用。const 限制重新绑定变量,并没有递归冻结引用指向的内容,因此修改属性与把变量换成另一个对象属于不同操作。
先明确这里的区别
const 固定的是变量绑定,对象内部属性仍可能改变。
以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。
const note = { title: 'demo' }; note.title = 'updated'; console.log(note.title);
怎样判断处理正确
比较属性修改与重新给 note 赋值的不同结果。
分别尝试改变属性和重新赋值,比较行为。需要不可变数据时应明确复制与更新策略,浅冻结也不会自动保护所有嵌套对象。
复制对象时要区分浅复制与深层结构。展开运算符创建新的顶层对象,但嵌套对象可能继续共享引用。理解这一点,才能解释为什么修改副本中的深层字段会影响原值。
需要留意的是,需要限制对象修改时,应单独考虑冻结与数据设计。
参考:JavaScript 文档。