JS中深浅拷贝 函数封装代码

  一、了解

基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问。

  二、浅拷贝

浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一个值,另一个也会动态改变。

  三、深拷贝

深拷贝是真正意义上实现了数组和对象的拷贝,它创建了另外一个一模一样的对象,和原对象不是一个内存地址,修改一个值不会影响另一个的值。

  四、封装实现深浅拷贝的函数

//封装函数 实现深浅拷贝  deep为true深拷贝 false浅拷贝function copy(oldObj,deep){let newObj = {};if (oldObj instanceof Array){newObj = [];}for (let key in oldObj){let value = oldObj[key];if (!!deep && typeof value === "object" && value !== null){ //如果原对象的某个属性是引用类型数据,递归调用copynewObj[key] = copy(value,deep);} else{            //如果原对象的某个属性是基本类型数据,直接将此属性赋值给新对象的相应属性newObj[key] = value;}}return newObj;}

效果如下:

let obj1 = {a:1,b:{c:2}};
let obj2 = copy(obj1,true);  //深拷贝
let obj3 = copy(obj1,false); //浅拷贝
obj1.b.c = 3;
console.log(obj2);  //{a:1,b:{c:2}}
console.log(obj3);  //{a:1,b:{c:3}}

本文仅仅简述了js深浅拷贝,以及实现深浅拷贝的简单代码,如有不当之处,请各位指正!谢谢!

2018-11-14

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发之Masonry框架-使用方法须知

目录 常用的属性与常量Masonry使用注意约束的优先级Masonry添加约束的方法修改约束在哪创建我的约束创建约束技巧:Masonry是一个轻量级的布局框架,它拥有自己的描述语法(采用更优雅的链式语法封装)来自动布局,具有很好…

wps单机无网络版_单平台销量破百万,这个国产单机系列要出网游,还要上主机...

他们想做"国际顶级的单机游戏开发商"。文/彭子诚作为一款国产单机游戏,《古剑奇谭三》在去年年底上市后,至今在 Steam 上依然保持着 83% 的好评率。大量的玩家对于游戏内容给出了认可,“用心”这个词是最高频出现的词语。Wegame 官…

JavaFX 8的弹出式编辑器

在过去的几个月中,我很高兴与JavaFX 8一起使用,以便为计划和调度应用程序实现复杂的用户界面。 所需的功能之一是执行“就地”编辑的方法,即快速编辑用户选择对象的某些基本属性的方法。 遵循“如果您无法创新,就模仿”的原则&am…

body onload 控制窗口大小 html,如何实现在调整浏览器窗口大小时缩放的网页?

感谢所有的建议!看起来我必须做的丑陋的东西是必要的。以下工作(在我的机器上,无论如何)在IE和FireFox中。我稍后可以为CodeProject.com制作一篇文章; - )这个javascript进入< head>部分:var tmout null;var mu…

【Mac命令行学习】(持续更新)

常用命令: 一、修改环境变量文件: 1、进入文件:vi .bash_profile 2、键盘点击【a】键,进入文件编辑 3、修改完成后,如果是vi,点击【esc】键退出编辑模式 4、输入以下命令进行具体操作: :wq 保存…

flex实现水平居中和两栏布局

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title>水平垂直的实现</title><style>.wrapper{width:25…

opencv 多线程加速_线程池给你写好了,想加速拿来用就行哈

图像拼接实现见&#xff1a;OpenCV源码系列|图像拼接1OpenCV源码系列|图像拼接2耗时在调用函数&#xff1a;Mat pano; Ptr stitcher Stitcher::create(mode); Stitcher::Status status stitcher->stitch(imgs, pano)能否将这一步放进线程池里进行加速呢&#xff1f;1. 测试…

poping 心法

音乐 01.Eamon - (How Could You) Bring Him Home02.The Pussycat Dolls - Buttons03.Most Wanted ft. Fingazz, Volture -From Juvi To The Penitentiary (Instrumental)04.Kaila Yu - Move05.Danity Kane - Show Stopper06.Slick Dogg - Bang On m07.Danity Kane - Show Stop…

G1 vs CMS vs平行GC

这篇文章是我们一年前进行的实验的跟进&#xff0c;比较了现实环境中不同GC算法的性能。 我们进行了相同的实验&#xff0c;将测试扩展为包含G1垃圾收集器&#xff0c;然后在不同的平台上运行了测试。 今年&#xff0c;我们的测试使用了以下垃圾收集器&#xff1a; -XX&#x…

html5 video修改默认样式,HTML5中将video设置为背景的方法

主要用到了video标签&#xff0c;css样式&#xff0c;原理是先将video标签利用position:fixed;使video标签脱离文档流&#xff0c;在将他的z-index设置为最低的&#xff0c;比如-9999。再插入的内容自然就覆盖在视频上面了。1.首先&#xff0c;将video插入到网页中&#xff0c;…

hdfs-03-hdfs客户端操作

1, hdfs中两种连接方式 1), 网页 2), 客户端 文件的切块大小和存储的副本数量&#xff0c;都是由客户端决定&#xff01; 所谓的由客户端决定&#xff0c;是通过配置参数来定的 hdfs的客户端会读以下两个参数&#xff0c;来决定切块大小、副本数量&#xff1a; 切块大小的参数&…

ES6语法的学习与实践

ES6是JavaScript语言的新一代标准&#xff0c;是ECMAScript的第六个版本&#xff0c;加入了很多新的功能和语法&#xff0c;在很多框架&#xff0c;如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的&#xff0c;下面对经常用到的ES6语法做简要的介绍。 1.let,const l…

python闭包的应用场景_简单谈谈Python中的闭包

Python中的闭包 前几天又有人留言&#xff0c;关于其中一个闭包和re.sub的使用不太清楚。我在脚本之家搜索了下&#xff0c;发现没有写过闭包相关的东西&#xff0c;所以决定总结一下&#xff0c;完善Python的内容。 1. 闭包的概念 首先还得从基本概念说起&#xff0c;什么是闭…

这是一次 docker 入门实践

前言 其实接触 docker 也有一段时间了&#xff0c;但是一直没有做下总结&#xff0c;现在网上关于 docker 的介绍也有很多了&#xff0c;本着好记性不如烂笔头的原则&#xff0c;还是自己再记录一波吧。 实现目标 安装 docker ce 探索 docker 基本概念及用法环境准备 Centos7 6…

html dom概念,js学习之HTML DOM的一些基础概念

经过近一个星期,总算把w3chool上的HTML DOM的实例差不多看了一遍,因为本身对其中的很多都用过,所以看起来也很快,现在就再系统的回顾下HTML DOM的一些概念和基础的东西,大部分都是从w3school上看到的什么是DOMDOM是w3c(万维网联盟)的标准DOM定义了访问HTML和XML的标准"W3C…

动态内存(一)

C中&#xff0c;动态内存的管理通过一对运算符来完成&#xff1a; new&#xff1a;在动态内存中为对象分配空间并返回一个指向该对象得指针 delete&#xff1a;接受一个动态对象的指针&#xff0c;销毁该对象&#xff0c;并释放与之关联的内存 说明&#xff1a;new申请的内存位…

DOM基础操作(二)

插入操作 1.appendChild(child); 这个是父级调用的方法&#xff0c;它会将child元素插入到父级里面&#xff0c;而且是放到逻辑后面的位置上。 1 div.appendChild(text); 2 div.appendChild(comment); JavaScript; “复制代码”); “查看纯文本代码”); “返回代码高亮”)…

关于Java垃圾收集

本文讨论的是使用的最受欢迎的框架之一带来的开销–我敢打赌&#xff0c;几乎没有应用程序不使用java.util.Collections。 本文基于以下事实&#xff1a;框架为例如集合的初始大小提供了默认值。 因此&#xff0c;我们有一个假设&#xff0c;即大多数人不会费心地自行管理其收…

ansys命令流_ANSYS命令流建模3之划分单元+施加弹簧

以马蹄形隧道为例&#xff0c;本文介绍如何添加荷载等隧道如上图所示!设置线单元材料属性&#xff0c;划分单元(二衬单元)lsel,s,,,1,6 !LSEL,Type,Item,Comp,VMIN, VMAX,VINClATT,1,1,3 !给线单元付材料号、实常数、单元类型号 LATT, MAT, REAL, TYPE, ESYSMSHKEY,1 …

计算机专业多元协同,项目主导多元协同资源开放—软件技术专业人才培养体系的创新实践.pdf...

第九届全国职业院校计算机系主任年会塑 造 I T 职 业 教 育 竞 争 力中国长沙 2018.10.12项目主导、多元协同、资源开放—软件技术专业人才培养体系的创新实践教授&#xff0c;常州信息职业技术学院副校长&#xff1b;眭碧霞 全国工业和信息化职业教育教学指导委员会委员&#…