1.深拷贝
深拷贝是将一个对象复制一份,并且与原对象的引用地址无关,即新对象不仅与原对象在属性值上相同,而且它们在内存空间中的地址不同。
适用场景:
操作对象的属性是可变的并且需要独立于原始对象;
对象属性中包含了其他对象的引用,同时需要避免修改这些对象的引用;
在多线程环境中,需要避免多个线程同时访问同一个对象。
写法:
// 使用深拷贝对数组进行复制
this.matchesList = JSON.parse(JSON.stringify(this.matches));
2.浅拷贝
浅拷贝是将一个对象复制一份,并将新对象的引用地址指向原对象,即新对象和原对象在某些属性值上相同,但它们在内存空间中的地址是相同的。当修改这些属性值的时候,会同时影响到复制的对象和原始对象。
适用场景:
对象属性值都是不可变的,或者不需要被修改;
需要共享一部分已有的信息,同时也需要有独立的信息。
写法:
// 使用浅拷贝对数组进行复制
this.matchesList = [...this.matches];
3.直接赋值
指向同一个对象,当等号右边值发生变化时,左边值也会随之改变。
写法:
this.matchesList = this.matches;