手写代码实现浅拷贝与深拷贝
时间: 2023-11-17 19:07:54 浏览: 87
浅拷贝是指将一个对象的属性值复制到另一个对象,如果属性值是基本类型,则直接复制,如果属性值是引用类型,则复制的是引用,两个对象会共享同一个引用类型的属性值。深拷贝是指将一个对象的所有属性值都复制到另一个对象,包括基本类型和引用类型,两个对象的属性值互不影响。
以下是JavaScript手写代码实现浅拷贝和深拷贝的示例:
// 浅拷贝
function shallowCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
const newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
}
}
return newObj;
}
// 深拷贝
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
const newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy(obj[key]);
}
}
return newObj;
}
浅拷贝的实现方式是遍历对象的属性,将属性值复制到新的对象中。如果属性值是基本类型,则直接复制,如果属性值是引用类型,则复制的是引用,两个对象会共享同一个引用类型的属性值。
深拷贝的实现方式是遍历对象的属性,如果属性值是基本类型,则直接复制,如果属性值是引用类型,则递归调用深拷贝函数,将引用类型的属性值也进行深拷贝。这样可以保证两个对象的属性值互不影响。
阅读全文