← 全部文章

技术与生活 / 一篇记录

const 不变,对象为什么还能修改?

变量保存的是对对象的引用。const 限制重新绑定变量,并没有递归冻结引用指向的内容,因此修改属性与把变量换成另一个对象属于不同操作。

先明确这里的区别

const 固定的是变量绑定,对象内部属性仍可能改变。

以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。

const note = { title: 'demo' }; note.title = 'updated'; console.log(note.title);

怎样判断处理正确

比较属性修改与重新给 note 赋值的不同结果。

分别尝试改变属性和重新赋值,比较行为。需要不可变数据时应明确复制与更新策略,浅冻结也不会自动保护所有嵌套对象。

复制对象时要区分浅复制与深层结构。展开运算符创建新的顶层对象,但嵌套对象可能继续共享引用。理解这一点,才能解释为什么修改副本中的深层字段会影响原值。

需要留意的是,需要限制对象修改时,应单独考虑冻结与数据设计。

参考:JavaScript 文档。

搜索文章

输入关键词,找回一篇记录。