深拷贝和浅拷贝都只针对引用数据类型
引用数据类型的变量和值在堆和栈里面是分开的,变量和值指引存储在栈里面,值存储在堆里面。
我们堆引用数据类型进行拷贝时,如果只是简单的复制给一个变量,两个变量指向的值是相同的都在堆里面。如果新变量改变值,原来的变量值也改变受到影响了,所以我们进行深拷贝要把变量和值都放到一个独立的内存空间里面当有修改时不影响原来的变量。
深拷贝实现方式
JSON.parse(JSON.stringify()) 用JSON.stringify()将对象转成字符串,再用JSON.parse()把字符串解析成对象。
varobj1 = {
'name': 'zhangsan',
'language': [1,[2,3],[4,5]],
};
varobj2 = JSON.parse(JSON.stringify(obj1));
obj2.name = "lisi";
obj2.language[1] = ["二","三"];
console.log('obj1',obj1)
console.log('obj2',obj2)
浅拷贝实现:
varobj1 = {
'name': 'zhangsan',
'language': [1,[2,3],[4,5]],
};
varobj2 = obj1;
obj2.name = "lisi";
obj2.language[1] = ["二","三"];
console.log('obj1',obj1)
console.log('obj2',obj2)