深拷贝和浅拷贝只针对Object和Array这样的引用数据类型的。
JS中基本数据类型存放在栈中,引用数据类型存放在堆中。
浅拷贝是在堆中先创建一个新对象,拷贝原始对象的属性值。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址。浅拷贝基本数据类型之间互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象。
深拷贝是在堆中先创建一个新对象,采用递归的方法,将一个对象从内存中完整的拷贝一份。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,在堆中创建一个新对象再完整拷贝原对象。深拷贝改变新对象不会影响原对象,他们之间互不影响。