浅拷贝:只是针对指针的拷贝,拷贝后两个指针指向同一个内存空间,例如B复制了A,当修改A时,B也跟着变了,这就是浅拷贝。
深拷贝:不但对指针进行拷贝,而且对指针的内容进行拷贝,经深拷贝之后的指针是指向两个不同地址的指针,例如B复制了A,当修改A时,B没变,这就是深拷贝。
注意:对于js的基本类型(number,string,boolean,null,undfined,symbol)和引用类型两种变量类型,基本类型在内存中属于栈内存,而引用类型在内存中的存储方式是堆内存。基本类型复制时,相当于把值也一并复制给了新的变量,改变原值,并不会影响新值;引用类型复制时,实际上只是复制了指向堆内存的地址,即原来的变量和复制的新变量指向了同一个东西,那么改变原来的值,新值也会改变。
实现深拷贝的方法:
1、深拷贝,是拷贝对象各个层级的属性,即实现深拷贝的方法就是,递归的去复制所有层级属性。比如数组的slice(0),concat()方法都是只拷贝了一级属性,二级属性或者更深层次的属性都不会拷贝,所以这些都不是真正的深拷贝,而extend()方法才是真正的深拷贝。
2、var objClone = JSON.parse(JSON.stringify(obj))
参考并感谢:
https://www.cnblogs.com/echolun/p/7889848.html
https://zhuanlan.zhihu.com/p/26282765