情景:我们在复制一个对象之后,对新的对象重新赋值时常会影响到原来的对象,这不是我们想要的结果,此片文章来解释并解决这个原因。
传送门:
https://www.cnblogs.com/chengguanhui/p/4737413.html
http://blog.csdn.net/flyingpig2016/article/details/52895620
http://blog.csdn.net/hairetz/article/details/4141043/
建议先看第一二篇文章,如果对堆栈感兴趣的 可以深入的看一下第三篇文章。
稍微写下自己的理解
出现这种事情的情况的原因是因为JS基本数据类型,和对象类型存粗的位置的导致的。
基本类型存于栈中,而对象存于堆中。
这就到了讲一个变量复制到另一个变量中后产生的不同效果。
我们知道对象是其实是保存一个地址,真正对象内的数据保存在另一地方,普通的赋值,仅仅是将这个地址给了新的变量,这是两个变量,但是一个地址,一个对象。那么为了解决这个问题,我们可以先声明一个空对象,然后在将源对象的值赋值到新对象中,这就是两个变量,两个地址,两个对象,不回互相影响。
但是,如果对象值是一个对象那么就会产生和之前一样的问题,这时候只要重复上面的方法就可以,用递归的方式处理。
详情可以参看上面文章中的方法。