首先,先了解深浅拷贝的含义:

浅拷贝就是通过简单地赋值的方式进行拷贝,那为什么说这是浅拷贝呢?就是因为赋值的方式只会把对象的表层赋值给一个新的对象,如果里面有属性值为数组或者对象的属性,那么就只会拷贝到该属性在栈空间的指针地址,新对象的这些属性数据就会跟旧对象公用一份,也就是说两个地址指向同一份数据,一个改变就会都改变。

深拷贝则不会出现上述问题,引用数据类型,它就会地址跟数据都会拷贝出来。

那么实现深拷贝就要会使用方法来实现:

1.通过递归函数来实现深拷贝

function myCopy(newObj, obj) {for(let key in obj) {if (obj[key] instanceof Array) {newObj[key] = []myCopy(newObj[key], obj[key])} else if (obj[key] instanceof Object) {newObj[key] = {}myCopy(newObj[key], obj[key])} else {newObj[key] = obj[key]}}
}

2.通过 json 实现深拷贝

function myCopy(obj) {let _obj = JSON.stringify(obj)let newObj = JSON.parse(_obj)return newObj
}
//接收返回值
let newObject = myCopy(obj)

3.通过jQuery封装的方法实现深拷贝

$.extend(true, newObj, obj)

什么是对象的深浅拷贝?怎么实现深浅拷贝?相关推荐

  1. 17.深浅拷贝和写时拷贝

    深浅拷贝 浅拷贝只拷贝指针,但拷贝后两个指针指向同一个内存空间: 深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针指向两个不同地址. 当类成员不包括指针何引用时,浅拷贝并无问题 ...

  2. 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝

    目录 1.Destructor(析构函数) 在堆和栈(函数作用域与内嵌作用域)上分别创建Employee对象,观察析构函数的行为 2.Friend(友元) 1.为何需要友元 2.友元函数和友元类 3. ...

  3. 拷贝赋值函数、拷贝构造函数

    拷贝构造函数 也是构造函数的一种,常用来以另一对象为模板创建新对象.如果对象中没有指针,可以直接使用数据库自带的该函数,但有指针就需要自己构建,这是为了避免造成浅拷贝,使两个指针指向同一内存空间. 例 ...

  4. 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )

    文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...

  5. 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...

  6. nio java 内核拷贝_大文件拷贝,试试NIO的内存映射

    最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...

  7. Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支

    1.背景 想拷贝代码到内网开发环境,因为网速很慢,所以希望Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支.因为我直接拷贝压缩一个项目居然有1G的内容, 2.重要步骤 复制一个项目,拷贝粘贴 3. ...

  8. java的深浅拷贝_Java中深浅拷贝

    一,浅拷贝 ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象.因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得 ...

  9. php深浅拷贝,js实现深浅拷贝方法

    说起深浅拷贝,我觉得需要理清楚 值类型 和 引用类型,本文主要和大家分享js实现深浅拷贝方法,希望能帮助到大家. 值类型 所谓 值类型 就是 undefined,null,number, string ...

  10. python怎么设置颜色深浅变化_python之深浅拷贝

    python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果,其实这个是由于共享内存导致的结果 拷贝:原则上就是把数据分离出来,赋值其数据,并以后修改互不影 ...

最新文章

  1. 重磅官宣:评职称将不做论文数量硬性要求!职称改革任务总体完成
  2. c++ lua 可以做什么_Redis令牌桶算法(全网最全,后续可以接入lua做原子性操作)...
  3. [转]用C#编写ActiveX控件(一)
  4. 最难学的十大编程语言,Java排第二,它竟是第一名!
  5. java hung_java – Hung JVM消耗100%的CPU
  6. 巧改注册表拥有超级cpu
  7. 一线Java架构师概括互联网公司的标准Java技术架构
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的公司管理系统
  9. python解析json传入变量_Python 使用 docopt 解析json参数文件过程讲解
  10. Android P:BottomAppBar和MaterialButton
  11. 已开源|码上用它开始Flutter混合开发——FlutterBoost
  12. Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限
  13. C语言进制转换 10进制转16进制(一)
  14. java中while的用法案例_Java While循环 do-while循环用法
  15. Revit二开--删除所有导入cad文件
  16. 面纱星云的西面纱中的女巫帚星云
  17. 【1小时记住Docker常用命令】Docker学以致用
  18. (10.2.3.3)静电的设计教室:APP设计利器Sketch教程(03)-让插件助你一臂之力(原创
  19. win10系统连接wifi后可以上网但是显示【无Internet,安全】解决 and Maple初始化失败问题
  20. python大写数字转阿拉伯数字脚本

热门文章

  1. virtuso版图_学习了解cadence virtuoso版图设计
  2. 不可不学的摄影技巧.4——后期处理
  3. 天梯赛 L2-030 冰岛人 (25 分)
  4. 宝塔面板——超牛逼的服务器管理软件+百度云端口组放行
  5. 数据分析从零到精通第七课 快速面试与入职
  6. [软件评测第十三期]echo回声
  7. 球球大作战测试服android版,球球大作战6.0
  8. Golang + Laya引擎实现的简易版“球球大作战”小游戏
  9. 【Lifelong learning】Lifelong Language Knowledge Distillation
  10. 【STM32】STM32 startup启动文件选择