克隆的概念
浅度克隆:原始类型为值传递,对象类型仍为引用传递。
深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
通俗一点就是浅克隆时原数据会跟着新数据一起修改,深度克隆则是重新复制一份,两份数据互不牵连。
js深拷贝方法
JSON.parse(JSON.stringify(arr1))
// 原理
// JSON.stringify(arr1):先把原始对象变为一个字符串(去除堆和堆嵌套的关系)
// JSON.parse(...):在把字符串转换为新的对象,这样浏览器会重新开辟内存来存储信息
js浅拷贝方法
1.for···in只循环第一层
// 只复制第一层的浅拷贝
function simpleCopy(obj1) {
var obj2 = Array.isArray(obj1) ? [] : {};
for (let i in obj1) {
obj2[i] = obj1[i];
}
return obj2;
}
var obj1 = {
a: 1,
b: 2,
c: {
d: 3
}
}
var obj2 = simpleCopy(obj1);
obj2.a = 3;
obj2.c.d = 4;
alert(obj1.a); // 1
alert(obj2.a); // 3
alert(obj1.c.d); // 4
alert(obj2.c.d); // 4
2.Object.assign方法
var obj = {
a: 1,
b: 2
}
var obj1 = Object.assign(obj);
obj1.a = 3;
console.log(obj.a) // 3
3.直接用=赋值