JavaScript的深浅拷贝
首先,要知道基本类型是没有深浅拷贝之分的,因为基本类型在进行复制时,就是将值直接复制给另一个;
而引用类型在进行复制时,由于占用内存比较大,只会复制引用地址,相当于复制只是共用了同一个对象/数组。
这样我们在更改一个时,另一个对象/数组就会跟着发生变化,如果我们不想要这种效果,就需要对其进行完全复制,使两个对象不再共用同一个对象/数组,相当于只是把一个对象/数组的值赋值给另一个对象/数组。
浅拷贝:只进行浅层的复制,只复制一层,更深层的数据发生改变另一个对象还是会发生改变。
- 使用for/in方式。
let obj1 = {name: "krismile"};
let obj2 = {};
for(const key in obj) {obj2[key] = obj1[key];
}
- 使用Object.assign函数。这个函数是将两个对象进行合并的,使两个对象的属性叠加,后面对象属性覆盖前面对象同名属性。
let obj1 = {name: "krismile"};
let obj2 = {obj: Object.assign({}, obj1);
- 使用…语法。
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的深浅拷贝相关推荐
- JavaScript 的 深浅 拷贝
深浅 拷贝 所谓的 深拷贝 浅拷贝 是 对 引用 数据类型而言的 如果变量储存的数据是 基本数据类型 例如 字符串,数值,布尔值等 没有所谓的 深浅拷贝 浅拷贝所谓的 浅拷贝 只是 复制变量中存储的内 ...
- Java三维数组深度复制,JavaScript —— 如何深浅拷贝数组
这两天遇到了一个问题,如何复制数组,所以就从各个地方找了很多的解决办法.算是整理一下,这样以便于自己以后的学习: 目录 浅拷贝数组 深拷贝数组 1.使用数组遍历赋值 原理 代码实现 2.返回新数组方法 ...
- 数组深拷贝_JavaScript之深浅拷贝
前面给大家分享过了JavaScript的类型判断,今天来跟大家分享一下JavaScript的深浅拷贝. 1. 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice.concat 返回一 ...
- php深浅拷贝,JavaScript 中的深浅拷贝
工作中经常会遇到需要复制 JavaScript 数据的时候,遇到 bug 时实在令人头疼:面试中也经常会被问到如何实现一个数据的深浅拷贝,但是你对其中的原理清晰吗?一起来看一下吧! 一.为什么会有深浅 ...
- JS(JavaScript)中实现深浅拷贝的几种方式(详细阅读 非常重要)。
在了解深浅拷贝之前,我们先一起来简单来了解一下,JavaScript 数据存储的方式,以及数据类型(). JavaScript 中数据存储分为 简单数据类型和复杂数据类型(引用数据类型) 其中 5 种 ...
- JavaScript进阶教程(6)—硬核动图让你轻松弄懂递归与深浅拷贝
目录 一.递归 1.1 概念 1.2 出口 1.3 递归经典问题:递归求斐波那契数列 1.4 递归经典问题:递归求阶乘 1.5 递归求一个数字各个位数上的数字的和 1.6 递归遍历DOM树 二 深浅拷 ...
- JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式
JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...
- JavaScript专题(五)深浅拷贝
JavaScript专题之深浅拷贝 了解拷贝背后的过程,避免不必要的错误,Js专题系列之深浅拷贝,我们一起加油- 目录 一.拷贝示例 二.浅拷贝 三.深拷贝的方法? 四.自己实现深浅拷贝 一.拷贝示例 ...
- boolean类型_JS核心理论之《数据类型、类型转换、深浅拷贝与参数传递》
数据类型 基本类型:共7种,也被称为值类型,是一种既非对象也无方法的数据.包括:string.number.bigint.boolean.null.undefined.symbol. 除了 null ...
最新文章
- 逸鹏说道:漫漫人生路
- Objective-C Autorelease Pool 的实现原理[转]
- Node和java和php,服务端I/O性能大比拼:Node、PHP、Java和Go(三)
- Linux之脚本执行
- 在 Msys pacman安装vim后遇到的abcd与backspace问题..
- php表单提交完返回,表单内容不清空解决方法
- 百度大脑公开课!快速定制高精度计算机视觉模型
- python爬虫下载模块_python爬虫模块之HTML下载模块
- HTML(超文本标记语言)的内容和理解
- linux 浏览器缓存目录在哪里找,火狐浏览器缓存文件在什么位置?缓存文件位置分享...
- 刘海洋《LaTex入门》学习笔记3
- PS使用技巧(三) 吸管工具I
- 前端练习:day02
- 为什么用于开关电源的开关管一般用MOS管而不是三极管
- 2.6 zio入门——对比Future
- Android实现仿有道云笔记头像背景(模糊效果)
- 【读书笔记】用户画像方法论与工程化解决方案
- 跟艾文学编程《零基础入门学Python》(4)Python 面向对象
- 成立3年亮出成绩单:高博要打造医疗创新高地
- moto Z2 Force ATT 版手机刷安卓8.0系统教程