深克隆与浅克隆之间的区别
深克隆:用递归复制了对象的所有层级
浅克隆:浅复制只复制一层对象的属性
浅克隆
浅克隆是指在克隆对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行克隆。就是将栈中的值复制一份给新的变量,因为浅复制只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅复制会导致两个对象指向都是同一个地址,一个发生改变另外一个也发生改变。
看一下上面的例子,定义了一个arr数组,再将arr的值赋值给Arr,输出Arr,得出的值是arr的值,再通过Arr使用数组的方法添加进了一个数字,结果arr和Arr两个都输出是同一个数组。简单的来说,也就是定义一个Array数组名字叫arr,然后将arr的值复制一份给Arr,这里Arr和arr两个数组指向的地址都是同一个Array数组,只要Arr和arr两个数组中一个改变,A让人和arr两个数组都会改变。
深克隆
深克隆本质上是创造一个完全一样的对象,但是两个对象的引用地址完全不同,也就是不同与浅克隆,一个对象的改变,另外一个对象并不会发生改变。