前端开发:JS中深拷贝和浅拷贝的区别
浅拷贝和深拷贝是编程中对象复制的两种方式。
浅拷贝:
- 创建一个新对象。
- 这个新对象有着原始对象属性的一,个浅拷贝(换句话说,新对象的属性指向原始对象属性的指引)。
深拷贝:
- 创建一个新对象。
- 新对象有着原始对象所有的属性的一个深拷贝(换句话说,新对象的属性是原始对象属性的拷贝,而不是指向它们的指引)。
在JavaScript中,浅拷贝可以通过对象的展开运算符(...)或者Array.prototype.slice()方法实现,而深拷贝则需要递归地复制嵌套的对象。
例子:
// 浅拷贝示例
const obj = { a: 1, b: { c: 2 } };
const shallowCopy = { ...obj };
// 深拷贝示例
const obj = { a: 1, b: { c: 2 } };
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Date) {
return new Date(obj.getTime());
}
if (obj instanceof Array) {
return obj.reduce((arr, item, i) => {
arr[i] = deepCopy(item);
return arr;
}, []);
}
if (obj instanceof Object) {
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepCopy(obj[key]);
return newObj;
}, {});
}
}
const deepCopyObj = deepCopy(obj);
在这个深拷贝函数中,我们考虑了几种特殊的对象类型(null,日期,数组)并对它们进行了特殊处理。对于普通的对象和数组,我们使用了Array.prototype.reduce()和Object.keys.reduce()方法来递归地复制所有的属性和值。
评论已关闭