js对象深拷贝的方法

小船

JS对象深拷贝是指,创建一个新对象,这个新对象和原对象拥有相同的属性和属性值,但是它们引用的是不同的内存地址。

相信大家都听说过「浅拷贝」,浅拷贝的局限在于,浅拷贝了之后,我们对拷贝出的新对象进行更改会影响到原对象,所以我们需要「深拷贝」。

实现深拷贝的一些方法:

1、使用JSON.stringify()和JSON.parse()方法

function deepClone(obj) {
  return JSON.parse(JSON.stringify(obj));
}

这种方法是最简单也是最常用的实现深拷贝的方法,我们只需要将对象转为字符串,然后再转为对象即可实现深拷贝。

但这种方法是存在局限的,例如它不能复制函数和undefined值。

2、使用递归函数

function deepClone(obj) {
  let clone = {};
  for(let prop in obj) {
    if(typeof obj[prop] === "object" && obj[prop] != null) {
      clone[prop] = deepClone(obj[prop]);
    } else {
      clone[prop] = obj[prop];
    }
  }
  return clone;
}

这种方法可以复制函数和undefined值,但如果对象中有循环引用,则将导致无限递归。