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值,但如果对象中有循环引用,则将导致无限递归。