首页 > 编程知识 正文

浅拷贝和深拷贝的方法,浅拷贝与深拷贝的区别

时间:2023-05-05 10:22:52 阅读:32012 作者:1759

“js面试题”数据类型-深度复制和浅复制面试题1 .手撕深度复制代码(递归) () ) ) ) ) ) ) )。

2.if ((=) ) ) console.log (1) ) if ()=(1) ) ) console.log ) /是否可以打印

数据类型js的数据类型为基本数据类型和引用数据类型基本数据类型:number、string、boolean、null、undefined、symbol (添加新的es6 )、BigInt 想存Function、Math、Object 引用数据类型堆栈内存基本数据类型的名和值都存储在中的行李时,储物柜里有号码行李寄存处也通过号码或条形码查看是哪个储物柜(在地址查看堆内存),引用数据类型地址存储在栈内存,盗取照片

面试题2的说明还说明了为什么[]==[] {}=={}为false,第一个[],{}在内存中打开新内存,第二个[],{}也打开新内存,地址不同。 (比较官方的回答是具体的值存储在堆内存中) ) )。

深拷贝的原理是深拷贝和轻拷贝是什么? 简而言之,是参照数据类型的赋值。 如果a代入b,b发生变化,a也发生变化,则称为写拷贝,如果a没有变化,则称为写拷贝。

官方回答:对象的实例存储在堆内存中,并使用引用值处理对象。 区别在于实例的副本和引用的副本

实现深度复制的方法1 .递归解析(经常用于封装深度复制函数) ) ) ) )。

functiondeepclone(obj ) letobjclone=array.isarray ) obj? []:{}; //参数(obj )可以是数组或对象if(objtypeofobj==='object ' )/obj是否为空,也可以是数组类型for(keyinobj ) if ) obj.hasownn (obj [ key ] type of obj [ key ]===' object ' )如果obj子元素是引用类型,则为递归的,不直接代入objclone[key]=deepclone ) obj子元素} else } }返回对象克隆; }}let a={ 'id': '01 ',' name': '四大名作',' books': new Array (,'西游记','三国演义','红楼梦', 《水浒传》)、《nnnnnnnnnname》note 2》: '三国演义讲述东汉末年到西晋初年近百年历史风云'、《note 3》: '红楼梦讲述四大家族兴衰'、《not E4》: a.books[2]='我不是四大名作',a.notes.note3='12345 ',console.log(a,b ); //b不受a的影响2 .简单粗暴,用json解决

缺点:函数无法复制,原型链丢失

在b=JSON.parse(JSON.stringify(a ) ) jQuery中解析,经常用于复制一个或多个目标对象

/*$.extend([deep]、target、object1、[objectn] ) deep默认为false或浅副本。 (///用法var b={}; //a还是上面的a,$.Extend(True,b,a ); a.books[2]='我不是四大名作' a.notes.note3='12345 ',console.log(a,b ); 在没有//b的影响下,APP场景多人合作的时候,需要得到后台数据,修改数据,但是觉得整个数据都被修改了,后台传错了,那是真的!

尖端强大的山水,如果有错误,请指出来!

参考文献

[1] :3359 blog.csdn.net/jiag 7701037/article/details/98738487

[2] :3359 blog.csdn.net/weixin _ 30289831/article/details/96261918

[3] :3359 blog.csdn.net/u 012172536/article/details/51849975

[4] :3359 blog.csdn.net/Qiqi _ 77 _/article/details/79400900

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。