深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
js中基本数据类型存放在栈中,引用数据类型存放在堆中。
浅拷贝是在堆中先创建一个新对象,拷贝原始对象的属性值。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址。
深拷贝是在堆中先创建一个新对象,采用递归方法实现深度克隆原理,将一个对象从内存中完整的拷贝一份出来。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,在堆中创建一个新对象再完整拷贝原对象。
区别:
浅拷贝基本类型之间互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象。
深拷贝改变新对象不会影响原对象,他们之间互不影响。
实现:
浅拷贝:Object.assign()、展开运算符… 、concat()、slice()
深拷贝:JSON.parse(JSON.stringify())、jQuery.extend()、递归