下面总结几种深拷贝的方法:
- JSON
JSON.parse(JSON.stringify());
JSON.stringify方法会忽略对象的不可遍历属性。 - 自己手写一个函数
function clone(target) {
if(typeof target === 'object'){
let copydata = Array.isArray(target)?[]:{}
for(let key in target) {
copydata[key] = clone(target[key])
}
return copydata
}else {
return target
}
}
- 对于循环引用的对象进行深拷贝
function clone(target, map = new Map()) {
if (typeof target === 'object') {
let cloneTarget = Array.isArray(target) ? [] : {};
if (map.get(target)) {
return map.get(target);
}
map.set(target, cloneTarget);
for (const key in target) {
cloneTarget[key] = clone(target[key], map);
}
return cloneTarget;
} else {
return target;
}
}