深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?

答: JavaScript 中存在两⼤数据类型:
基本类型
引⽤类型
基本类型数据保存在在栈内存中
引⽤类型数据保存在堆内存中,引⽤数据类型的变量是⼀个指向堆内存中实际对象的引⽤,存在栈中

浅拷⻉
浅拷⻉,指的是创建新的数据,这个数据有着原始数据属性值的⼀份精确拷⻉
如果属性是基本类型,拷⻉的就是基本类型的值。如果属性是引⽤类型,拷⻉的就是内存地址
即浅拷⻉是拷⻉⼀层,深层次的引⽤类型则共享内存地址
下⾯简单实现⼀个浅拷⻉
function shallowClone(obj) { const newObj = {}; for(let prop in obj) { if(obj.hasOwnProperty(prop)){ newObj[prop] = obj[prop]; } } return newObj; }

JavaScript 中,存在浅拷⻉的现象有:

  • Object.assign
  • Array.prototype.slice() , Array.prototype.concat()
  • 使⽤拓展运算符实现的复制

深拷⻉
深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会
改变另⼀个对象的属性
常⻅的深拷⻉⽅式有:

  • _.cloneDeep()
  • jQuery.extend()
  • JSON.stringify()
  • ⼿写循环递归

深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?相关推荐

  1. 深拷⻉浅拷⻉的区别?什么是深拷⻉浅拷⻉

    深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉? JavaScript 中存在两⼤数据类型: 基本类型 引⽤类型 基本类型数据保存在在栈内存中 引⽤类型数据保存在堆内存中,引⽤数据类型的变量是⼀个指向堆内存中 ...

  2. **深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?**

    JavaScript 中存在两⼤数据类型: 基本类型 引⽤类型 基本类型数据保存在在栈内存中 引⽤类型数据保存在堆内存中,引⽤数据类型的变量是⼀个指向堆内存中实际对象的引⽤,存在栈中 浅拷⻉ 浅拷⻉, ...

  3. 深拷⻉浅拷⻉的区别?如何实现一个深拷贝?

    深拷贝 JavaScript 中存在两⼤数据类型: 基本类型 引⽤类型 基本类型数据保存在在栈内存中 引⽤类型数据保存在堆内存中,引⽤数据类型的变量是⼀个指向堆内存中实际对象的引⽤,存在栈中 浅拷⻉ ...

  4. 【面试题】深复制与浅复制的区别

    目录 浅复制 深复制 浅复制 被复制对象的所有变量都含有与原来对象相同的值,而所有其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 深复制 被复制对象的所 ...

  5. java 浅堆 深堆_JVM中的一个小知识点:深堆和浅堆的概念

    java中的堆内存算是整个内存区域中最重要的一块,几乎所有的对象都分配在堆内存.在堆内存中有两个主要的概念需要我们理解,这对分析java堆内存的故障有着重要的作用,分别是深堆和浅堆. 一.概念 我们先 ...

  6. python深复制浅复制_Python复制–深层复制

    python深复制浅复制 Today we will learn about Python copy class. We will also learn about shallow copy, dee ...

  7. 20.docker cp从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面 1.从容器里面拷文件到宿主机?s 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径   ...

  8. java深入微服务原理改造房产销售平台,Java深入微服务原理改造房产销售平台

    端午大礼包,等你来拿 今天推送的教程是:Java深入微服务原理改造房产销售平台 Java深入微服务原理改造房产销售平台 微服务是近年来非常流行的架构,是后端资深开发工程师必备技能.本课程将基于房产销售 ...

  9. numpy的深复制与浅复制的区别_Python之Numpy基础,强大到让你五体投地

    以前总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python,所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门 ...

最新文章

  1. AChartEngine中的Renderer和DataSet介绍
  2. 9个不为人知的Python技巧
  3. 让云×××—微软虚拟化远程直播
  4. Kali Linux 下渗透测试 | 3389 批量爆破神器 | hydra | 内网渗透测试
  5. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...
  6. hive 行转列和列转行的方法_面试常考!SQL行转列和列转行
  7. android开发那些事儿(五)-通用流行框架大全
  8. 全网首发:FFMpeg使用NVIDIA DECODER,解码后的数据是NV12,不是YUV420P
  9. java 单体 启动优化_java设计优化之单例模式
  10. Lattice Diamond在线调试Reveal Analyzer使用教程
  11. jquery中使用ajax的php实例
  12. ie9浏览器无法安装ActiveX控件问题
  13. 看steam教育之风带来创新与变革
  14. #{}和${}的区别
  15. java微信公众号获取地理位置_Java微信公众平台开发之获取地理位置
  16. JS公式实例一:画圆
  17. 计算机白板培训心得,关于电子白板的学习心得体会
  18. 3ds运行linux,全能游戏模拟器 RetroArch 1.7.0发布,附Ubuntu中PPA安装
  19. springboot+微信小程序大学校园网上图书馆信息管理系统的设计与实现毕业设计源码091535
  20. 计算机毕设 SpringBoot 智慧养老平台 养老院管理系统 养老信息管理系统 Java Vue MySQL数据库 远程调试 代码讲解

热门文章

  1. dz论坛修改html编辑器,discuz插件推荐:编辑器H5上传
  2. 如何将txt文件用shell拆分成多个?
  3. 19.JavaScript学习笔记——数组
  4. 【AIOT】3-1 物联网项目必备功能模块
  5. 【转】2009最受欢迎中国技术博客评选(PB50)结果公布
  6. 物流行业智能化转型的幕后推手!盘点机器视觉物流分拣四大优势
  7. java 实现dns劫持_什么是HTTP劫持和DNS劫持
  8. vue开发微信公众号调用相机和相册(上传到自己的服务器)
  9. android仿最新版本微信相册--附源码
  10. 平分肥宅快乐水(C++)