js的深拷贝和浅拷贝
此文件 描述了什么是js的深拷贝和浅拷贝
var a = myobj; a.num = 2; console.log(a) console.log(myobj)
这段代码 把对象myobj直接复给变量a相当于把整个的myobj在内存中的地址一并复给变量a,所以 当你改变变量a里面的任何一个属性都会影响到原来的对象也就是myobj.
如果在改变a的属性的情况下 不影响原来的对象那么 我们就需要利用for in循环 把myobj里面的属性 依次赋值给一个新的对象也就是index.html中41行开始部分(这里也就
就是浅拷贝)。
那么这种情况下 如果你修改的新的对象中的属性但是这个属性不是一个对象(arr or Object)的时候 是不会影响原来的对象myobj,但是如果你修改的恰巧是一个对象 的话,那么原来的对象myobj也会跟着改变,那么 怎么解决这个问题呢?
这个时候 我们就需要利用递归来重复执行浅拷贝,取出myobj中的key而不取myobj中key的值在内存中的地址。这个时候就是深拷贝。在修改新对象中的属性时,即使是一个 对象 也不会影响到原来的对象myobj。