浅拷贝
浅拷贝:一般指的是把对象的第一层拷贝到一个新对象上去
// 浅拷贝
function shallowCopy(object) {
// 只拷贝对象类型
if (!object || typeof object !== "object") return;
// 根据object的类型判断是新建一个数组还是对象
let newObject = Array.isArray(object) ? [] : {
};
// 遍历object,并且判断是object的属性才拷贝
for (let key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
newObject[key] = object[key];
}
}
return newObject;
}
深拷贝
深拷贝:一般需要借助递归实现,如果对象的值还是个对象,要进一步的深入拷贝,完全替换掉每一个复杂类型的引用
// 深拷贝
function deepCopy(object) {
if (!object || typeof object !== "object") return;
let newObject = Array.isArray(object) ? [] : {
};
for (let key in object) {
// 判断是object的属性才拷贝
if (Object.prototype.hasOwnProperty.call(object, key)) {
newObject[key] =
typeof object[key] === "object" ? deepCopy(object[key]) : object[key];
}
}
return newObject;
}