什么是深拷贝,浅拷贝

深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。

1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象只是对原对象的一个引用

2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

那么怎么实现一个深拷贝呢?
实现思路:

  1. 检查类型,判断类型是否为引用类型,是就进行深拷贝,否则浅拷贝
  2. 使用递归
  3. 检查环,判断当前引用是否指向自身,避免进入死循环
  4. 需要忽略原型
function deepClone(obj){// 判断当前对象是对象还是数组let result = Array.isArray(obj)?[]:{};if(obj && typeof obj === "object"){for(let key in obj){// 判断是否为自身属性if(obj.hasOwnProperty(key)){if(obj[key] && typeof obj[key] === "object"){//子元素为对象,进入递归result[key] = deepClone(obj[key]);}else{result[key] = obj[key];}}}}return result;
}

深拷贝(什么是深拷贝,为什么要进行深拷贝,如何进行深拷贝)相关推荐

  1. js深拷贝和浅拷贝对数组的影响_浅拷贝与深拷贝(JavaScript)

    一.预备知识 ECMAScript变量包含两种不同数据类型的值:基本数据类型和引用数据类型. 基本数据类型:名值存储在栈内存中: 引用数据类型:名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引 ...

  2. js深拷贝和浅拷贝对数组的影响_javaScript中的深拷贝和浅拷贝

    今天来整理一下js中的深浅拷贝 深浅拷贝 简单来说,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着A一起变了,说明这是浅拷贝,如果B没有变,那就是深拷贝. 看例题 //案例1var a1 ...

  3. 深拷贝与浅拷贝是什么?如何实现浅拷贝和深拷贝?

    基于对什么是深拷贝?什么是浅拷贝?如何实现一个深拷贝和浅拷贝?为什么要用到深拷贝?的思考,总结如下,如有不足之处希望多多指教. 什么是浅拷贝? 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用. A是 ...

  4. 详谈Javascript中的深拷贝和浅拷贝

    数据复制是我们编程中经常会使用到的技术,对于普通数值数据来说,复制很简单,但是对于复杂类型比如对象的复制,就会有很多需要考虑的东西,比如我们经常说到的深拷贝和浅拷贝. 浅拷贝 复制的对象和原始对象属性 ...

  5. js 对象深拷贝_这一次,彻底理解JavaScript深拷贝

    导语 这一次,通过本文彻底理解JavaScript深拷贝! 阅读本文前可以先思考三个问题: JS世界里,数据是如何存储的? 深拷贝和浅拷贝的区别是什么? 如何写出一个真正合格的深拷贝? 本文会一步步解 ...

  6. C# 之String以及浅拷贝与深拷贝

    C# 之String以及浅拷贝与深拷贝  一.String到底是值类型还是引用类型 MSDN 中明确指出 String 是引用类型而不是值类型,但 String 表面上用起来却像是值类型,这又是什么原 ...

  7. 深入浅出深拷贝与浅拷贝

    一.基本类型与引用类型 ECMAScript 中数据类型可分为: 基本类型:String.Number.Boolean.Symbol.null.undefined 引用类型:Object.Array. ...

  8. handle句柄 matlab_学习随笔之Matlab句柄对象深拷贝方法

    最近在使用Matlab句柄对象时,被深拷贝和浅拷贝的坑折腾得不轻,而且网上相关的应用资料也比较少,好在MathWork的帮助文档非常丰富,并且有应用案例,花了几天时间终于理出了一些头绪,以下是自己使用 ...

  9. Java的深拷贝和浅拷贝

     熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象.深拷贝就是两个对象的值相等,但是互相独立.本来想把以前写的一篇文章扩充一下,没想 ...

  10. python怎样给对象赋值_Python对象赋值、浅拷贝和深拷贝

    总结: 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象 2.copy.deepcopy 深拷贝 拷贝对象及其子对象 1.对象赋值 will = ["Will&quo ...

最新文章

  1. Java 理解泛型的基本含义
  2. R语言编写自定义函数、创建使用ggplot2生成图标(icon)的主题(theme)函数、使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标、ggsave保存图标(png、svg
  3. 微软“SharePoint天天向上”第一期线上活动
  4. Hibernate -- Dao层 -- CURD -- 随记
  5. DCASE 2013任务1(声学场景分类)参赛作品相关信息
  6. 注册表被黑客篡改 怎样修复_使用快速注册表黑客设置Office 2007配色方案
  7. Iptables入门教程
  8. Spring Cloud Bus 消息总线实现配置自动刷新
  9. day22:更换yum源及源码包安装
  10. python dict遍历性能_python 字典(dict)遍历的四种方法性能测试报告
  11. 【BZOJ1500】[NOI2005]维修数列
  12. hashmap8底层源码剖析1--构造以及put
  13. Hessian matrix黑塞矩阵(海森矩阵)和雅克比矩阵Jacobian matrix
  14. win10商店打不开_Win10应用商店出现异常打不开三种解决方法
  15. Unity MMORPG游戏的设计(一)前期简单分析
  16. 著名的斐波那契额数列,1 1 2 3 5 8输出第n项
  17. 张博涵清华大学_看了清华大学“神仙打架”,网友:我在这个世界上就是凑数的...
  18. get the sack
  19. harbor提示账号密码错误无法登录
  20. 《奇幻的森林》观后感 (r8笔记第72天)

热门文章

  1. 净辐射的计算-landsat
  2. linux 内存 thp,操作系统内存大页(THP)对redis性能的影响
  3. 消息人士透露JDI今年开始为苹果Apple Watch供应OLED屏幕
  4. 单击Dell电脑window10F11和F12可调节亮度
  5. 蚂蚁金服招纳安全工程师啦~
  6. cocos2dx-js RenderTexture 将多张图片合并成一张图片
  7. C++处理Json串——jsoncpp库
  8. RxJava(最简单实现-主要是Observe)
  9. 程序员必看的10本书,轻松提升自己
  10. 计算机的硬件的发展,计算机的硬件发展.doc