Skip to content

浅拷贝与深拷贝:引用共享、结构复制与边界

主题边界

  • 浅拷贝复制的是第一层属性绑定,嵌套对象仍共享引用;深拷贝试图复制整棵对象图。
  • 真正难点在于循环引用、特殊对象、原型、访问器和可转移资源。

机制与流程

  • Object.assign、展开运算符、数组 slice 都属于浅拷贝。
  • structuredClone 基于结构化克隆算法,支持更多内建类型,并能处理循环引用与 Transferable。
  • JSON 序列化本质上不是深拷贝算法,它会丢失函数、undefined、symbol、原型和部分特殊对象。

关键差异

  • 深拷贝适合隔离可变状态;不可变数据结构则通过结构共享降低复制成本。
  • cloneDeep 类工具覆盖更广,但仍然不能无损复制闭包、DOM 节点和宿主资源句柄。

边界条件

  • 深拷贝不总是好事,大对象频繁完整复制会带来明显内存和 CPU 开销。
  • 复制状态前要先判断是否真的需要复制整棵对象图,还是只需复制会被修改的局部。

工程落点

  • 状态管理和性能优化都需要明确“哪里允许共享引用,哪里必须隔离”。
  • 很多前端 bug 本质上不是响应式失效,而是浅拷贝后仍共享嵌套引用导致数据意外联动修改。

相关主题