这段实现深拷贝的代码为什么会出错呢?
暂时没有考虑会传进去,null,正则对象等
function deepclone(target) {
let Tclass = target.constructor
let cloneObject = new Tclass;
for (let key in target) {
if (target.hasOwnProperty(key)) {
cloneObject[key] = deepclone(target[key])
}
}
return cloneObject
}
let obj = {
name: 'wc',
age: 18,
address: {
city: 'bj'
},
arr: [1, 2, 3]
}
let newobj = deepclone(obj)
console.log(newobj);
最后多次测试发现还是要加一个判断,不然会一直递归然后爆栈
if (typeof obj !== 'object' || obj === null) {
return obj;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:在深拷贝过程中,如果不考虑特殊情况传入null、正则对象等,可能会出现一些问题。为了避免这些问题,可以增加针对这些特殊情况的处理。具体方法如下:
if (obj === null) return null;
if (obj instanceof RegExp) {
return new RegExp(obj);
}
const deepCopy = function (obj) {
if (typeof obj !== "object") {
return obj;
}
if (Array.isArray(obj)) {
return obj.map((item) => deepCopy(item));
}
let newObj = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy(obj[key]);
}
}
return newObj;
};
通过以上的处理方法,可以避免在深拷贝代码中出现null、正则对象等特殊情况的问题。