Appearance
浅拷贝与深拷贝:引用共享、结构复制与边界
主题边界
- 浅拷贝复制的是第一层属性绑定,嵌套对象仍共享引用;深拷贝试图复制整棵对象图。
- 真正难点在于循环引用、特殊对象、原型、访问器和可转移资源。
机制与流程
- Object.assign、展开运算符、数组 slice 都属于浅拷贝。
- structuredClone 基于结构化克隆算法,支持更多内建类型,并能处理循环引用与 Transferable。
- JSON 序列化本质上不是深拷贝算法,它会丢失函数、undefined、symbol、原型和部分特殊对象。
关键差异
- 深拷贝适合隔离可变状态;不可变数据结构则通过结构共享降低复制成本。
- cloneDeep 类工具覆盖更广,但仍然不能无损复制闭包、DOM 节点和宿主资源句柄。
边界条件
- 深拷贝不总是好事,大对象频繁完整复制会带来明显内存和 CPU 开销。
- 复制状态前要先判断是否真的需要复制整棵对象图,还是只需复制会被修改的局部。
工程落点
- 状态管理和性能优化都需要明确“哪里允许共享引用,哪里必须隔离”。
- 很多前端 bug 本质上不是响应式失效,而是浅拷贝后仍共享嵌套引用导致数据意外联动修改。