美文网首页
JS深浅拷贝的区别以及实现深拷贝的方法

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

作者: 南山码僧 | 来源:发表于2020-04-08 15:37 被阅读0次

    深浅拷贝的区别:

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

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

    实现深拷贝的方法:

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

    优点:

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

    缺点:

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

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

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

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

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

    相关文章

      网友评论

          本文标题:JS深浅拷贝的区别以及实现深拷贝的方法

          本文链接:https://www.haomeiwen.com/subject/mkpzphtx.html