JS深浅拷贝的区别以及实现深拷贝的方法

深浅拷贝的区别:

区别在于被拷贝对象的值为引用型时,拷贝的是该对象栈中存储的指针地址,该地址指向堆中存储数据的具体位置,而非开辟一个新的堆内存空间来存储被拷贝对象的具体数据。这种情况就是浅拷贝,反之则是深拷贝

因为浅拷贝拷贝的是栈中存储的指针地址,而非数据本身,所以原对象有任何变化都会导致拷贝出来的新对象也跟着变化。

实现深拷贝的方法:

1:JSON.parse(JSON.stringify())

优点:

简单易用,能覆盖大多数场景。

缺点:

❀ 对于一些值为特殊类型的数据是无法拷贝的,如Symbol、Set、Map、Function、RegExp。

❀ 对于循环引用的对象实施拷贝的时候会出现无限递归的情况,造成栈溢出。

❀ 无法拷贝对象原型上的属性

2:自定义递归函数完美拷贝目标对象

:这里没有进行原型拷贝,如果需要拷贝原型上的属性可以通过Object.getPrototypeOf()方法取出对象原型上的属性然后放入新对象上即可。

你可能感兴趣的:(JS深浅拷贝的区别以及实现深拷贝的方法)