Appearance
深拷贝手写题:递归、循环引用与特殊对象边界
主题边界
- 手写深拷贝的核心目标是复制对象图而不是复制某几个字面量对象。
- 要先明确题目要求支持哪些对象类型。
机制与流程
- 基础实现通过递归遍历对象和数组,并为每个引用类型分配新的容器。
- 处理循环引用通常要用
WeakMap记录源对象到目标对象的映射,避免无限递归。 - Date、RegExp、Map、Set、TypedArray、Symbol key、原型链复制等都属于扩展边界。
关键差异
- 教学题常只要求普通对象和数组;工程题更关注为什么不直接用
structuredClone或成熟库。 - 完整性越强,代码越长、性能越差,也越难无损覆盖所有宿主对象。
边界条件
- 函数、DOM 节点、WeakMap、闭包上下文等无法用常规深拷贝无损复制。
- 不明确边界就开始写代码,通常会把大量时间耗在补洞上。
工程落点
- 工程里多数时候应优先考虑结构共享或
structuredClone,而不是手写一个半成品深拷贝。 - 手写题真正体现的是你对对象模型、递归和边界管理的掌握程度。