赋值:
当我把一个对象赋值给一个新的变量时,赋的其实时该对象的在栈中的地址,而不是在堆中的数据,也就是说两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。
具体实现:
浅拷贝: 重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会相互印象。
浅拷贝实现方式:
除上述代码
Object.assign()
lodash里面的_.clone
…展开运算符
Array.prototype.concat
Array.prototype.slice
深拷贝: 从堆中内存开辟一个新的区域存放新对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响
在 JavaScript 中, constructor 属性返回对象的构造函数。
深拷贝的实现方法:
$.extend
JSON.stringify结合JSON.parse