前言要理解JavaScript中浅拷贝和深拷贝的区别,首先要了解JavaScript的数据类型。JavaScript有两种数据类型,原始数据类型和引用数据类型。1.基本数据类型:undefined,boolean,number,string,null,简单数据存放在栈内存中2.引用数据类型:Array,object,Function,存放在堆内存空间如下图:注:a1=0;a2='thisisstr';a3=null,存放在栈内存中;varc=[1,2,3]andvard={m:20},**变量名和内存地址存放在栈中在内存中**,**但是**[1,2,3]and{m:20}作为**对象存储在堆内存中**;基础数据类型的副本vara=20;变量b=a;如下图:引用数据类型的复制varm={a:10,b:20};varn=m;m和n指向同一个内存空间,当m或n改变时,其他也改变,如m.a='webshow';console.log(n.a);//如何输出webshow让引用数据类型有自己独立的内存空间???深拷贝方式使用递归的方式拷贝对象##妙招**基本数据类型**方式将对象转成字符串拷贝。具体使用JSON.stringify和JSON.parse实现深拷贝。原因是JSON.stringify(obj)被转换成字符串,变成了基本数据类型。基本类型的拷贝是直接在栈内存中开辟一个新的空间,直接拷贝一个name-value,不影响之前的对象。请看代码:总结1.浅拷贝:只拷贝指向对象的指针,不拷贝对象本身,新旧对象共享一块内存;2.深拷贝:一键复制创建同一个对象,不共享内存,修改新对象,旧对象不变;实现深拷贝主要有两种方法(1)递归(2)JSON.stringify结合JSON.parse
