js递归实现深拷贝的方式
https://www.cnblogs.com/xie-zhan/p/6479922.html
主要代码:
function deepclone(obj1 ,obj2){
if(obj1||obj1=={}){
obj1 = {}
}
for(let k in obj2){
if(obj2.hasOwnProperty(k)){//克隆非公有属性
if(typeof obj2[k]=="object"){//判断递归的参数类型
obj1[k] = Array.isArray(obj2[k])?[]:{};//根据不同类型赋值obj1
deepclone(obj1[k],obj2[k])//递归调用
}
else{
obj1[k] = obj2[k]
}
}
}
}
使用深拷贝函数的方式:
https://blog.youkuaiyun.com/chentony123/article/details/81428803
除以上几种拷贝形式以外还可以使用MessageChannel的方式达到深拷贝的目的
function structuralClone(obj) {
return new Promise(resolve => {
const {port1, port2} = new MessageChannel();
port2.onmessage = ev => resolve(ev.data);
port1.postMessage(obj);
});
}
var obj = {a: 1, b: {
c: b
}}
// 注意该方法是异步的
// 可以处理 undefined 和循环引用对象
(async () => {
const clone = await structuralClone(obj)
})()