深克隆与浅克隆之间的区别

深克隆:用递归复制了对象的所有层级
浅克隆:浅复制只复制一层对象的属性

浅克隆

浅克隆是指在克隆对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行克隆。就是将栈中的值复制一份给新的变量,因为浅复制只会将对象的各个属性进行依次复制,并不会进行递归复制,而 JavaScript 存储对象都是存地址的,所以浅复制会导致两个对象指向都是同一个地址,一个发生改变另外一个也发生改变。


看一下上面的例子,定义了一个arr数组,再将arr的值赋值给Arr,输出Arr,得出的值是arr的值,再通过Arr使用数组的方法添加进了一个数字,结果arr和Arr两个都输出是同一个数组。简单的来说,也就是定义一个Array数组名字叫arr,然后将arr的值复制一份给Arr,这里Arr和arr两个数组指向的地址都是同一个Array数组,只要Arr和arr两个数组中一个改变,A让人和arr两个数组都会改变。

深克隆

深克隆本质上是创造一个完全一样的对象,但是两个对象的引用地址完全不同,也就是不同与浅克隆,一个对象的改变,另外一个对象并不会发生改变。

①判断是不是原始值
②判断是数组还是对象 Object.prototype.toString.call([]) = ‘[object Array]’ Object.prototype.toString.call({}) = ‘[object Object]’
③建立相应的数组和对象
④递归

将Arr中的name改成“zx”。

打印出来的两个对象中name属性中的属性值完全就不同。深克隆的不同,它不仅将原对象的各个属性逐个复制出去,而且将原对象各个属性所包含的对象也依次采用深复制的方法递归复制到新对象上。也就是说的arr和Arr两个的引用地址不同,改掉两个对象中一个对象的属性值,而另一个对象中的属性值不会发生改变。

深克隆与浅克隆的区别相关推荐

  1. 深克隆和浅克隆的区别

    克隆 1.简介 在Java中对象的克隆有深克隆和浅克隆之分.有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的.基本数据类型存储在栈中,引用数据 ...

  2. java clone() 方法详解及深克隆与浅克隆

    概述 clone 翻译过来就是 克隆,顾名思义就是创造一个一模一样的事物.Java 代码中 clone() 方法是 Object 方法,而 Object 又是所有类的父类,也就是说所有 java 对象 ...

  3. vue数组的深克隆和浅克隆

    在开发过程中,前端获取到后端的数据之后,通常直接复制后就使用,比如: var _data = res.data; //浅克隆 data是一个数组 这就是浅克隆的写法,因为后端返回的data是一个数组, ...

  4. 深克隆和浅克隆有什么区别?它的实现方式有哪些?

    浅克隆(Shadow Clone) 是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对 ...

  5. JS 中的 assign 方法究竟是 “深克隆” 还是 “浅克隆”?

    先说一下答案:assign做的是浅克隆. "第一层是深克隆,下面的每一层做的是浅克隆" 这种说法其实是错误的.    在我们去探究assign是深克隆还是浅克隆之前,我们必须先明白 ...

  6. 我不知道的事——深克隆和浅克隆

    推荐一部好电影<致命魔术>.(此处为植入广告)        推荐理由:涉及人性.画面不错,剧情跌宕,亦魔亦幻(此处的"魔"为魔术的"魔").虽然女 ...

  7. Javascript深克隆和浅克隆

    深克隆和浅克隆 浅克隆:只需要拷贝对象中的原始类型值,引用类型拷贝的仍然是地址 深克隆:无论是原始类型还是引用类型都会进行拷贝,包括引用类型中还有其他引用类型的质. <script>let ...

  8. 浅析Java中的深克隆和浅克隆

    说实话,目前为止还没在项目中遇到过关于Java深克隆和浅克隆的场景.今天手抖戳开了花呗账单,双十二败家的战绩真是惨不忍睹,若能在我的客户端"篡改"下账单金额,那该(简)有(止)多( ...

  9. 原型模式以及深克隆和浅克隆

    原型模式的好处 创建比较复杂的对象,无需考虑过程,简化了创建对象的创建过程,同时也能提 高效率 原型模式分为浅克隆和深克隆,不同点 以我目前的理解:深克隆和浅克隆对于我们对象内的引用对象的克隆不一样 ...

最新文章

  1. linux apt qt下载,Linux如何安装 apt-get 软件管理工具
  2. nuSVC的使用和解读
  3. 与、或、短路或、自增、自减、的执行过程
  4. pd种知道每个数据的类型_每个数据科学家都应该知道的5个概念
  5. 风格指南——Solidity中文文档(10)
  6. kafka 如何做到1秒发布百万级条消息?
  7. 推荐一款好用的截图软件Faststone capture
  8. css 垂直居中_CSS垂直居中的另类实现
  9. Spring Security xsd 异常
  10. oem718d 基准站设置_诺瓦泰NovAtel OEM718D全系统多频单机测向板卡
  11. php等待参数跳转,Thinkphp页面跳转设置跳转等待时间的操作
  12. React路由配置:React Router
  13. python—如何删除(保留)字符串中除字母、数字外的其他元素
  14. 怎么判断间隙过渡过盈配合_什么是间隙配合、过盈配合、过渡配合?它们在汽车上有哪些应用?...
  15. 百度搜索跳过验证码_百度搜索是死是活?网友吵翻了天,你觉得呢
  16. MapReduce实现QQ好友推荐
  17. 扫雷可以用计算机,接龙扫雷Windows经典游戏原来还有这些用处啊
  18. nvm-windows下载与安装
  19. 人力资源管理的毕业论文选题推荐?
  20. matlab交叉耦合,交叉耦合滤波器怎么从耦合矩阵得出频率响应

热门文章

  1. 串口转无线网模块:WizFi630 快速入门指导
  2. @Validated和@Valid校验参数、级联属性、List
  3. java读取文件并输出内容
  4. C++的封装、继承和多态
  5. YYModel 简单解析
  6. Android系统ROM+RAM基础裁剪
  7. 集成学习(含常用案列)
  8. 软件工程Alpha冲刺day4
  9. java微服务开发(基础环境篇)
  10. button渐变色 ios_ios开发