Skip to content
On this page

深拷贝

javascript
function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
  const newObj = obj instanceof Array ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      newObj[key] = deepClone(obj[key]);
    }
  }
  return newObj;
}

该函数接受一个参数 obj,判断 obj 是否为 null 或非对象类型,如果是,直接返回 obj;否则,根据 obj 的类型创建一个新对象 newObj,然后遍历 obj 的属性,递归调用 deepClone 函数复制属性值,并将复制后的属性值赋给 newObj 对应的属性。最后返回 newObj

该函数能够递归复制多层嵌套的对象,包括普通对象、数组、Date 对象、RegExp 对象等,但是对于函数、Symbol、Map、Set 等复杂类型可能存在一些限制,需要根据具体情况进行处理。

Released under the MIT License.