js深拷贝和浅拷贝

一、数组的深浅拷贝

在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。

var arr = ["One","Two","Three"];var arrto = arr;
arrto[1] = "test";
document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,test,Three
document.writeln("数组的新值:" + arrto + "<br />");//Export:数组的新值:One,test,Three

像上面的这种直接赋值的方式就是浅拷贝,很多时候,这样并不是我们想要得到的结果,其实我们想要的是arr的值不变,不是吗? 
方法一:js的slice函数 

复制代码
对于array对象的slice函数,
返回一个数组的一段。(仍为数组)
arrayObj.slice(start, [end])
参数
arrayObj
必选项。一个 Array 对象。
start
必选项。arrayObj 中所指定的部分的开始元素是从零开始计算的下标。
end
可选项。arrayObj 中所指定的部分的结束元素是从零开始计算的下标。
说明
slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。
slice 方法一直复制到 end 所指定的元素,但是不包括该元素。如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度。如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度。如果省略 end ,那么 slice 方法将一直复制到 arrayObj 的结尾。如果 end 出现在 start 之前,不复制任何元素到新数组中。
复制代码

 

var arr = ["One","Two","Three"];var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
document.writeln("数组的新值:" + arrtoo + "<br />");//Export:数组的新值:One,set Map,Three

 

方法二:js的concat方法 

concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
语法
arrayObject.concat(arrayX,arrayX,......,arrayX)
说明
返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。

 

var arr = ["One","Two","Three"];var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
document.writeln("数组的新值:" + arrtooo + "<br />");//Export:数组的新值:One,set Map To,Three

 

二、对象的深浅拷贝

复制代码
var a={name:'yy',age:26};
var b=new Object();b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(b);//Object { name="yy", age=26}
console.log(a);//Object { name="xx", age=26}
复制代码

就是把对象的属性遍历一遍,赋给一个新的对象。

复制代码
var deepCopy= function(source) { 
var result={};
for (var key in source) {
      result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];
   } return result; 
}

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

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

相关文章

dbeaver 数据转化 mapping_Python机器学习实例:数据竞赛-足球运动员身价估计

前言1&#xff0c;背景介绍每个足球运动员在转会市场都有各自的价码。本次数据练习的目的是根据球员的各项信息和能力来预测该球员的市场价值。2&#xff0c;数据来源FIFA20183&#xff0c;数据文件说明数据文件分为三个&#xff1a;train.csv         训练集     文件…

对SQL server、Oracle、MySQL和PostgreSQL进行OLTP性能测试(Benchmark)

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#xff0c;首发于 【掘金】&#x1f4e2;作者格言&#xff1a;生活在于…

【完整版】当大师遇到了理工男,只能吐血了...

全世界有3.14 % 的人已经关注了爆炸吧知识1、青年问禅师&#xff1a;“大师&#xff0c;我很爱我的女朋友&#xff0c;她也有很多优点&#xff0c;但是总有几个缺点让我非常讨厌&#xff0c;有什么方法能让她改变&#xff1f;”禅师浅笑&#xff0c;答&#xff1a;“方法很简单…

[FW]软件开发中的11个系统思维定律

“我会更加努力地工作”——一匹名叫Boxer的马&#xff08;出自乔治奥威尔的《动物农庄》&#xff09; 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案&#xff08;Today’s problems come from yesterday’s sol…

5单个编译总会编译全部_VS2019 v16.5 MSVC编译器后端更新汇总

MSVC更新汇总在Visual Studio 2019 v16.5中&#xff0c;我们已经对C后端进行了持续的改进更新&#xff0c;包括新增了一些新特性和优化点&#xff0c;编译时间优化&#xff0c;以及更好的安全性。下面我们来汇总一下目前关于MSVC编译器后端更新的要点&#xff1a;> Intel JC…

计算机职称 计算机二级证,国家计算机二级证书含金量有多高

首先感谢你的邀请&#xff0c;我们都知道在大学生涯考证中&#xff0c;计算机二级#计算机二级#基本是在校大学生必备的证书。当然我说的必考证书是针对已经了解计算机证书的&#xff0c;当然可能还有一些人不了解&#xff0c;那学姐简单来说一下&#xff0c;什么是全国计算机二…

无法使用此安装程序来安装 .net framework_NuGet是什么?理解与使用(上)

如果你了解python&#xff0c;那么它类似pip。如果你了解nodejs&#xff0c;那么它类似npm。如果你了解ruby&#xff0c;那么它类似gem。对&#xff0c;它就是一个包&#xff08;package&#xff09;管理平台&#xff0c;确切的说是 .net平台的包管理工具&#xff0c;它提供了一…

NoSQL 是否可以用来做日志中心 ?

咨询区 ikrain&#xff1a;请问大家在分布式程序中用 nosql 来做日志中心的经验&#xff1f;我做了一些研究&#xff0c;发现用 Mongodb 做日志中心是一个非常好的选择&#xff0c;而且我发现 log4net 对它也是直接集成的&#xff0c;比如: log4mongo-net 。不知道大家可推荐这…

长能耐了?想造反了?你老婆没了.......

1 提出问题的人一律直接解决掉▼2 今年的心理阴影是金字塔和钢琴键带来的▼3 广州考如何催收房租&#xff1f;▼4 想起了大雄的衣柜......▼5 这简直一毛一样▼6 我今天非要跳上去不可&#xff01;突然想到我还有点急事&#xff0c;告辞……▼7 据说&#xff0c;有不少男…

php 无限查找下级业绩_PHP 面试踩过的坑

因为最近需要面试&#xff0c;所以特意整理了一下面试所经历的一些面试题。分享一下&#xff0c;希望对自己有用&#xff0c;也对其他人有用。尚未有答案的&#xff0c;后面会陆续更新&#xff0c;如果有补充答案的&#xff0c;也十分感激。1.get,post 的区别**显示有区别 **ge…

python获取历史双色球数据_你的梦想,我来买单!Python分析双色球中奖号码竟成功获取特等奖

关于双色球的话题估计大家都听的很多&#xff0c;毕竟成本很低&#xff0c;但是收获很高。毕竟当利润达到100&#xff05;时,就有人敢于铤而走险。当利润达到200&#xff05;时,他们就敢于冒上断头台的危险。 而当利润达到300%他们就会践踏人间的一切法律。更何况是n倍的利润刺…

分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~

前言在真实的项目中&#xff0c;不管是功能日志、错误日志还是异常日志&#xff0c;已经是项目的重要组成部分。在原始的单体架构&#xff0c;通常看日志的方式简单粗暴&#xff0c;直接登录到服务器&#xff0c;把日志文件拷贝下来进行分析&#xff1b;而如今分布式、微服务架…

《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

章节回顾&#xff1a; 《TCP/IP详解卷1&#xff1a;协议》第1章 概述-读书笔记 《TCP/IP详解卷1&#xff1a;协议》第2章 链路层-读书笔记 《TCP/IP详解卷1&#xff1a;协议》第3章 IP&#xff1a;网际协议&#xff08;1&#xff09;-读书笔记 《TCP/IP详解卷1&#xff1a;协议…

10以内的分解与组成怎么教_狗狗酷炫的飞盘游戏怎么玩?分解步骤教你快速学会...

现在的铲屎官都喜欢训练自己的狗狗&#xff0c;训练狗狗不仅可以增加狗狗与主人的感情&#xff0c;还能增强狗狗的协调性&#xff0c;开发狗狗的智力&#xff0c;可谓一举两得。其中飞盘是大家都比较爱的活动&#xff0c;经常看看狗狗以华丽的身姿一跃接起主人扔的飞盘&#xf…

计算机组成与系统 报告,计算机组成与系统结构实验报告2

计算机组成与系统结构实验报告,西北工业大学评语: 课中检查完成的题号及题数&#xff1a; 成绩:自评成绩:95课后完成的题号与题数&#xff1a;实验报告实验名称&#xff1a; 班级&#xff1a;1.4 CPU 与简单模型机设计实验 日期&#xff1a; 2015.11.16 杨添文10011303 学号&am…

c++ 异步下获取线程执行结果_前端异步编程的那些事

啊一、异步编程的运行机制我们学习Javascript语言的时候就知道它的执行环境是”单线程“的。所谓”单线程“&#xff0c;就是指一次只能处理一个任务。如果有多个任务&#xff0c;就必须排队&#xff0c;前面一个任务完成&#xff0c;再执行后面一个任务。常见的浏览器无响应(假…

自动驾驶规划算法

本文将讲解BFS&#xff0c;Dijstra&#xff0c;A*&#xff0c;动态规划的算法原理&#xff0c;不正之处望读者指正&#xff0c;希望有兴趣的读者能在评论区提出一些这些算法的面试考点&#xff0c;共同学习&#xff0c;一起进步 0 图论基础 图有三种&#xff1a;无向图、有向…

印度网民集体删除中国APP,网友评论亮了

全世界只有3.14 % 的人关注了爆炸吧知识最近&#xff0c;国外有一款Remove China Apps火了。这款APP只有一个功能&#xff1a;可以一键扫描用户手机里的应用&#xff0c;识别出自中国公司的应用&#xff0c;并进行一键删除的骚操作。应用的主图标、界面&#xff0c;甚至特意使用…

SQL Server 负载均衡集群(转)

SQL Server 负载均衡集群一个应用系统随着业务量的提高,以及访问量和数据流量的快速增长&#xff0c;各个核 心部分的处理性能和计算强度也相应增大&#xff0c;使得单一设备根本无法承担。在此情况下&#xff0c;如果扔掉现有设备去做大量的硬件升级&#xff0c;必将造成现有资…

大前端快闪二:react开发模式 一键启动多个服务

最近全权负责了一个前后端分离的web项目&#xff0c;前端使用create-react-app[1], 后端使用golang做的api服务。npx create-react-app my-app cd my-app npm start歘歘歘&#xff0c;就搭建了一个react前端项目。前端老鸟都知道npm start或yarn start以开发模式启动react App&…