深拷贝和浅拷贝
深:因为 js 对象 是引用类型,在对象赋值过程中,赋值的是地址,会导致原来的对象属性修改,被赋值的那一方也会发生修改,为了解决这个问题,我们使用深拷贝 浅:
js
let tag = { name: "tag" };
object.assign(tag, { name: "new", type: "assign" });
js
const a = {
name: "a",
child: {
name: "child",
},
target: [1, 2],
};
a.target = a;
const deepClone = (value, cache = new WeakMap()) => {
if (!value) return value;
if (typeof value !== "object") return value;
if (cache.get(value)) return cache.get(value);
let result = new value.constructor();
cache.set(value, result);
Object.keys(value).map((item) => {
result[item] = deepClone(value[item], cache);
});
return result;
};
const obj = deepClone(a);
a.name = "aa";
console.log(obj);
console.log(obj.name);