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

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

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

深浅拷贝的区别:

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

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

实现深拷贝的方法:

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

优点:

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

缺点:

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

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

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

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

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

相关文章

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

    深浅拷贝的区别: 区别在于被拷贝对象的值为引用型时,拷贝的是该对象栈中存储的指针地址,该地址指向堆中存储数据的具体...

  • JS 中深拷贝的几种实现方法

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 方法二 2、通过 JSON 对象实现深拷贝 缺点 (1...

  • js 深拷贝和浅拷贝区别,以及实现深拷贝的方法

    深拷贝和浅拷贝最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用,深拷贝在计算机中开辟了一块内存地址用...

  • Javascript中的深拷贝

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 //使用递归的方式实现数组、对象的深拷贝 functi...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • iOS基础知识点(网络摘抄)

    1.父类实现深拷贝时,子类如何实现深拷贝。父类没有实现深拷贝时,子类如何实现深拷贝? 深拷贝同浅拷贝的区别:...

  • 深拷贝、浅拷贝

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 面试题整理

    父类实现深拷贝时,子类如何实现深度拷贝。父类没有实现深拷贝时,子类如何实现深度拷贝。 深拷贝同浅拷贝的区别:浅拷贝...

  • 2020前端高频面试题总结(附答案)

    [ js基础题 ] 1. new的实现原理是什么? 2. 深拷贝和浅拷贝的区别是什么 深拷贝 浅拷贝 3. bin...

  • iOS知识点(一)

    1.1 父类实现深拷贝时,子类如何实现深度拷贝。 父类没有实现深拷贝时,子类如何实现深度拷贝。深拷贝同浅拷贝的区别...

网友评论

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

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