实现一个函数 deepClone(obj),深拷贝一个对象

· 约 3 分钟读完 · 第 2 / 125 章

推荐答案

本题详细解读

1. 基本思路

深拷贝的核心思想是递归地复制对象的所有属性,包括嵌套的对象和数组。我们需要处理以下几种情况:

  • 基本类型(如 number, string, boolean 等):直接返回。
  • null 和 undefined:直接返回。
  • Date 对象:创建一个新的 Date 对象,复制时间戳。
  • RegExp 对象:创建一个新的 RegExp 对象,复制正则表达式。
  • 数组:递归地复制数组中的每个元素。
  • 对象:递归地复制对象的每个属性。

2. 代码解析

  • 基本类型和 null 检查:如果 obj 是基本类型或 null,直接返回 obj。
  • Date 对象处理:如果 obj 是 Date 对象,创建一个新的 Date 对象并复制时间戳。
  • RegExp 对象处理:如果 obj 是 RegExp 对象,创建一个新的 RegExp 对象并复制正则表达式。
  • 数组处理:如果 obj 是数组,创建一个新数组,并递归地复制每个元素。
  • 对象处理:如果 obj 是对象,创建一个新对象,并递归地复制每个属性。

3. 注意事项

  • 循环引用:这个实现没有处理循环引用的情况。如果对象中存在循环引用,会导致无限递归。可以通过使用 WeakMap 来存储已经拷贝过的对象来解决这个问题。
  • 性能:深拷贝是一个相对耗时的操作,尤其是在处理大型对象时。在实际应用中,应尽量避免不必要的深拷贝。

4. 扩展

  • 处理循环引用:可以通过引入 WeakMap 来存储已经拷贝过的对象,避免无限递归。
  • 处理更多类型:可以根据需要扩展 deepClone 函数,支持更多类型的深拷贝,如 Map、Set 等。