深拷贝与浅拷贝

146 阅读1分钟

引用类型的变量其实是一个指针,这个指针指向的是堆内存中的地址。

浅拷贝新旧对象还是共享同一块内存,但深拷贝是为新对象开辟了一个新的内存空间。

image.png

  1. 直接赋值 引用类型直接复制其实是不同的指针指向了相同的引用对象,所以会相互影响。

  2. 浅拷贝 浅拷贝只是复制了第一层对象的属性,因此如果对象内的属性是引用类型,修改是会相互影响的。但第一层数据类型为基本类型时,浅拷贝后不会相互影响。

浅拷贝的方式:

数组:Array.concat()  Array.slice()
对象:Object.assign({}, obj)
  1. 深拷贝 递归拷贝对象中的每一个属性,所以深拷贝后两个对象之间互不影响。

深拷贝的方式:

JSON.parse(JSON.stringify(obj))