js深拷贝浅拷贝
一般我们以为这样就可以复制某个对象但是事实并非如此
let data = {
a: 100,
b: 100,
c: {
c1: 100
}
}
let newData = data;
newData.a = 200;
newData.c.c1 = 200;
console.log(data);
你会发现原始数据也仍然被改变
如果我们使用es6提供的 … 扩展运算符会是什么结果
let data = {
a: 100,
b: 100,
c: {
c1: 100
}
}
let newData = { ...data };
newData.a = 200;
newData.c.c1 = 200;
console.log(data);
a 变量没有改变但是 c 下的 c1 任然被改变,总结扩展运算符只能对第一次进行复制
如果我们使用json工具会不会有效呢?
let data = {
a: 100,
b: 100,
c: {
c1: 100
}
}
let newData = jsonCopy(data);
newData.a = 200;
newData.c.c1 = 200;
console.log(data);
function jsonCopy(obj) {
let jsonObj = JSON.stringify(obj);
return JSON.parse(jsonObj);
}
答案显然是可以的,当然你也可以使用递归赋值 (我本人觉得这样更快更简单,也减轻了浏览器的运算压力)