浅拷贝和深拷贝

浅拷贝和深拷贝

Posted by Lan on June 11, 2019

浅拷贝和深拷贝。

浅拷贝

相同空间

多个引用指向同一对象实例,改变一个引用会使得另一个引用随之发生变化

let a=[1,2,3],b=[]

b.push(a) //b:[[1,2,3]]

a.pop()   //b: [[1,2]]

上述代码在a被push进b后,改变a,b也会发生变化

深拷贝

新的空间

在堆中重新分配内存,把原对象所有属性都进行新建拷贝,拷贝后的对象与原对象完全隔离,各自的改变互不影响

一些数组的深拷贝方法

var a=[1,2,3]

var b=[...a]

var b=a.slice()

var b=Array.from(a)

var b=[].concat(a)