1、浅拷贝:就是重新分配一块内存,创建一个新对象,但里面的元素是对原对象各个元素的引用。
2、 深拷贝:重新分配一块内存,创建一个新对象,并将原对象的元素以递归的方式,通过创建新的子对象拷贝到新对象中,与原对象没有任何关联。
手写浅拷贝
function shallowClone(obj) {
if (!obj || typeof obj !== 'object') return;
let newObj = obj.isArray ? [] : {};
for(let k in obj) {
if (obj.hasOwnProperty(k)) {
newObj[k] = obj[k];
}
}
return newObj;
}
手写深拷贝
function deepClone(obj) {
if (!obj || typeof obj !== 'object') return;
let newObj = obj.isArray ? [] : {};
for(let k in obj) {
if (obj.hasOwnProperty(k)) {
newObj[k] = obj[k].isArray ? deepClone(obj[k]) : obj[k];
}
}
return newObj;
}
本文详细介绍了JavaScript中浅拷贝和深拷贝的概念,通过手写浅拷贝和深拷贝函数示例,展示了如何在编程中通过内存分配和递归实现对象的浅层和深层复制,以及它们之间的区别在于是否保留了对象间的引用关系。
173





