跳到主要内容
版本:1.0

深复制

简单介绍

copy原理 js 中,对于赋值操作符:= 基本类型的数据:number,string,boolean 等的赋值 copy 直接是深拷贝 对于引用类型的数据:array,object 等的赋值 copycopy 第一层的引用地址,操作对象始终是原对象

浅拷贝
let a = 3;
let arr = [1, 2, 3];
//浅拷贝
let b = a;
let arr2 = [...arr];
深拷贝
function deepClone(data, hash = new WeakMap()) {
if (data == undefined) return data;
if (typeof data !== "object") return data;
if (data instanceof RegExp) return new RegExp(data);
if (data instanceof Date) return new Date(data);

let v = hash.get(data);
if (v) return v;

let instance = new data.constructor();
hash.set(data, instance);
for (let key in data) {
if (data.hasOwnProperty(key)) {
instance[key] = deepClone(data[key], hash);
}
}
return instance;
}

let a = {
name: "bob",
desc: {
age: 12,
},
};

let b = deepClone(a);
b.desc.age = 100;
console.log(b);
console.log(a);

// js 循环引用
let t = {};
t.t = t;
console.log(deepClone(t));