引用类型的变量其实是一个指针,这个指针指向的是堆内存中的地址。
浅拷贝新旧对象还是共享同一块内存,但深拷贝是为新对象开辟了一个新的内存空间。
-
直接赋值 引用类型直接复制其实是不同的指针指向了相同的引用对象,所以会相互影响。
-
浅拷贝 浅拷贝只是复制了第一层对象的属性,因此如果对象内的属性是引用类型,修改是会相互影响的。但第一层数据类型为基本类型时,浅拷贝后不会相互影响。
浅拷贝的方式:
数组:Array.concat() Array.slice()
对象:Object.assign({}, obj)
- 深拷贝 递归拷贝对象中的每一个属性,所以深拷贝后两个对象之间互不影响。
深拷贝的方式:
JSON.parse(JSON.stringify(obj))