Skip to content

深拷贝手写题:递归、循环引用与特殊对象边界

主题边界

  • 手写深拷贝的核心目标是复制对象图而不是复制某几个字面量对象。
  • 要先明确题目要求支持哪些对象类型。

机制与流程

  • 基础实现通过递归遍历对象和数组,并为每个引用类型分配新的容器。
  • 处理循环引用通常要用 WeakMap 记录源对象到目标对象的映射,避免无限递归。
  • Date、RegExp、Map、Set、TypedArray、Symbol key、原型链复制等都属于扩展边界。

关键差异

  • 教学题常只要求普通对象和数组;工程题更关注为什么不直接用 structuredClone 或成熟库。
  • 完整性越强,代码越长、性能越差,也越难无损覆盖所有宿主对象。

边界条件

  • 函数、DOM 节点、WeakMap、闭包上下文等无法用常规深拷贝无损复制。
  • 不明确边界就开始写代码,通常会把大量时间耗在补洞上。

工程落点

  • 工程里多数时候应优先考虑结构共享或 structuredClone,而不是手写一个半成品深拷贝。
  • 手写题真正体现的是你对对象模型、递归和边界管理的掌握程度。

相关主题