首先,要知道基本类型是没有深浅拷贝之分的,因为基本类型在进行复制时,就是将值直接复制给另一个;
而引用类型在进行复制时,由于占用内存比较大,只会复制引用地址,相当于复制只是共用了同一个对象/数组。
这样我们在更改一个时,另一个对象/数组就会跟着发生变化,如果我们不想要这种效果,就需要对其进行完全复制,使两个对象不再共用同一个对象/数组,相当于只是把一个对象/数组的值赋值给另一个对象/数组。

浅拷贝:只进行浅层的复制,只复制一层,更深层的数据发生改变另一个对象还是会发生改变。

  1. 使用for/in方式。
let obj1 = {name: "krismile"};
let obj2 = {};
for(const key in obj) {obj2[key] = obj1[key];
}
  1. 使用Object.assign函数。这个函数是将两个对象进行合并的,使两个对象的属性叠加,后面对象属性覆盖前面对象同名属性。
let obj1 = {name: "krismile"};
let obj2 = {obj: Object.assign({}, obj1);
  1. 使用…语法。
let obj1 = {name: "krismile"};
let obj2 = {...obj1};

深拷贝:进行深层次的拷贝,完全赋值,使两个对象/数组不相关。

function deepCopy(object) {let obj = object instanceof Array ? [] : {};for(const [k, v] of Object.entries(object)) {obj[k] = typeof v == 'object' ? deepCopy(v) : v;}return obj;
}//or
//obj传入是复制对象还是数组的判断,如{}、[],object传入要复制的值
function deepCopy(obj, object) {var o = obj;for(var key in object) {if(typeof object[key] === 'object') {//使用constructor判断类型是数组还是对象o[key] = (object[key].constructor === Array) ? [] : {};deepCopy(o[key], object[key]);}else {o[key] = object[key];}}return o;
}

以上根据自己的理解所写,如有错误,请大佬们指正,❥(ゝω・✿ฺ)。

JavaScript的深浅拷贝相关推荐

  1. JavaScript 的 深浅 拷贝

    深浅 拷贝 所谓的 深拷贝 浅拷贝 是 对 引用 数据类型而言的 如果变量储存的数据是 基本数据类型 例如 字符串,数值,布尔值等 没有所谓的 深浅拷贝 浅拷贝所谓的 浅拷贝 只是 复制变量中存储的内 ...

  2. Java三维数组深度复制,JavaScript —— 如何深浅拷贝数组

    这两天遇到了一个问题,如何复制数组,所以就从各个地方找了很多的解决办法.算是整理一下,这样以便于自己以后的学习: 目录 浅拷贝数组 深拷贝数组 1.使用数组遍历赋值 原理 代码实现 2.返回新数组方法 ...

  3. 数组深拷贝_JavaScript之深浅拷贝

    前面给大家分享过了JavaScript的类型判断,今天来跟大家分享一下JavaScript的深浅拷贝. 1. 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice.concat 返回一 ...

  4. php深浅拷贝,JavaScript 中的深浅拷贝

    工作中经常会遇到需要复制 JavaScript 数据的时候,遇到 bug 时实在令人头疼:面试中也经常会被问到如何实现一个数据的深浅拷贝,但是你对其中的原理清晰吗?一起来看一下吧! 一.为什么会有深浅 ...

  5. JS(JavaScript)中实现深浅拷贝的几种方式(详细阅读 非常重要)。

    在了解深浅拷贝之前,我们先一起来简单来了解一下,JavaScript 数据存储的方式,以及数据类型(). JavaScript 中数据存储分为 简单数据类型和复杂数据类型(引用数据类型) 其中 5 种 ...

  6. JavaScript进阶教程(6)—硬核动图让你轻松弄懂递归与深浅拷贝

    目录 一.递归 1.1 概念 1.2 出口 1.3 递归经典问题:递归求斐波那契数列 1.4 递归经典问题:递归求阶乘 1.5 递归求一个数字各个位数上的数字的和 1.6 递归遍历DOM树 二 深浅拷 ...

  7. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  8. JavaScript专题(五)深浅拷贝

    JavaScript专题之深浅拷贝 了解拷贝背后的过程,避免不必要的错误,Js专题系列之深浅拷贝,我们一起加油- 目录 一.拷贝示例 二.浅拷贝 三.深拷贝的方法? 四.自己实现深浅拷贝 一.拷贝示例 ...

  9. boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》

    数据类型 基本类型:共7种,也被称为值类型,是一种既非对象也无方法的数据.包括:string.number.bigint.boolean.null.undefined.symbol. 除了 null ...

最新文章

  1. 逸鹏说道:漫漫人生路
  2. Objective-C Autorelease Pool 的实现原理[转]
  3. Node和java和php,服务端I/O性能大比拼:Node、PHP、Java和Go(三)
  4. Linux之脚本执行
  5. 在 Msys pacman安装vim后遇到的abcd与backspace问题..
  6. php表单提交完返回,表单内容不清空解决方法
  7. 百度大脑公开课!快速定制高精度计算机视觉模型
  8. python爬虫下载模块_python爬虫模块之HTML下载模块
  9. HTML(超文本标记语言)的内容和理解
  10. linux 浏览器缓存目录在哪里找,火狐浏览器缓存文件在什么位置?缓存文件位置分享...
  11. 刘海洋《LaTex入门》学习笔记3
  12. PS使用技巧(三) 吸管工具I
  13. 前端练习:day02
  14. 为什么用于开关电源的开关管一般用MOS管而不是三极管
  15. 2.6 zio入门——对比Future
  16. Android实现仿有道云笔记头像背景(模糊效果)
  17. 【读书笔记】用户画像方法论与工程化解决方案
  18. 跟艾文学编程《零基础入门学Python》(4)Python 面向对象
  19. 成立3年亮出成绩单:高博要打造医疗创新高地
  20. moto Z2 Force ATT 版手机刷安卓8.0系统教程

热门文章

  1. 家用带宽二级路由openwrt设置ipv6
  2. FineBI帮助文档一眼尽收眼底
  3. 掌握模电必需阅读的几本书
  4. 神经网络图用什么软件做,神经网络输入图片大小
  5. SU插件情报局 | Laubwerk智能代理植物插件(附插件获取)
  6. FPGA学习笔记-1 FPGA原理与开发流程
  7. C++ boost库中的sp_counted_base实现解析
  8. 【Python】字符串转换为ASCII码
  9. 常用快捷键大全Win7快捷键
  10. uniapp ->video 黑屏 无时长(新手容易遇到的坑)