JavaScript 实现深拷贝

79 阅读1分钟

JavaScript 深拷贝

export function deepCopy(obj1) {
  const obj2 = Array.isArray(obj1) ? [] : {};
  if (obj1 && typeof obj1 === "object") {
    for (let i in obj1) {
      let prop = obj1[i]; // 避免相互引用造成死循环,如obj1.a=obj1
      if (prop === obj1) {
          continue;
      }
      // 仅拷贝对象自身属性
      if (obj1.hasOwnProperty(i)) {
        // 如果子属性为引用数据类型,递归复制
        if (prop && typeof prop === "object") {
            obj2[i] = deepCopy(prop);
        } else {
            // 如果是基本数据类型,只是简单的复制
            obj2[i] = prop;
        }
      }
    }
  }
  return obj2;
}