js实现数组和对象的深浅拷贝

上传人:ni****g 文档编号:491702333 上传时间:2023-01-09 格式:DOC 页数:2 大小:37KB
返回 下载 相关 举报
js实现数组和对象的深浅拷贝_第1页
第1页 / 共2页
js实现数组和对象的深浅拷贝_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《js实现数组和对象的深浅拷贝》由会员分享,可在线阅读,更多相关《js实现数组和对象的深浅拷贝(2页珍藏版)》请在金锄头文库上搜索。

1、js实现数组和对象的深浅拷贝前提:原始数据类型和对象类型赋值时的差异的数据类型分为原始数据类型和对象类型。二者在内存中存放的方式不同,导致了其赋值时差异。分别举个栗子获得了和同样的值console.log(x);/1存放的是指向这个数组对象的引用地址也获得数组对象的引用地址console.log(m);/3,个由上栗子可以看出:原始数据类型赋值时,给的是实实在在的数据值,赋值后二者只是值一样而已,不会相互影响;而对象类型,给的是原数据的引用地址,所以新旧数据会互相影响,因为本质上还是同一个数据对象,如上栗中的数组什么是浅拷贝?顾名思义,浅拷贝就是流于表面的拷贝方式;当属性值为对象类型时,只拷贝

2、了对象数据的引用,导致新旧数据没有完全分离,还会互相影响。再举个栗子/测/试数据实现浅拷贝/修/改拷贝后的数据是原始数据类型所以是直接赋值的是对象数据类型所以拷贝的是对象的引用,其实还是和原数组使用同一对象s栗子中是的浅拷贝对象,数组元素是原始数据类型的不会相互影响了(),但是是对象类型,还是会互相影响。如何实现浅拷贝上栗中的或者是特殊的实现数组浅拷贝的方式。如何自己实现呢?遍历对象数组的每个属性,然后赋值给一个新的对象不就行了么,如下实现实现浅拷贝sj判断目标类型,来创建返回值js只复制元素自身的属性,不复制原型链上的sjjs测直试直sconsoss原数据也被修改深拷贝及其实现从浅拷贝解释基

3、本可以明白,深拷贝就是完全拷贝,拷贝之后新旧数据完全分离,不再共用对象类型的属性值,不会互相影响。实现方式:取巧方式JSON.parse(JSON.stringify(Obj)vartest=1,a,name:lei,age:18;varcopy1=JSON.parse(JSON.stringify(test);/特殊方式console.log(copy1);copy12.name=zhangconsole.log(test);1,a,name:lei,age:18未受到影响注意:这种方式不能深拷贝有属性值为函数的对象,可自行尝试2.实现深拷贝已经实现了浅拷贝,思考下应该是对对象类型属性值赋值

4、时,导致的没有完全分离,所以要修改下拷贝对象类型属性值的方式,对它再调用一次深拷贝,这样就实现了深拷贝,如下:/实现深拷贝functiondeepCopy(target)if(typeoftarget!=object)return;/判断目标类型,来创建返回值varnewObj=targetinstanceofArray?:;for(varitemintarget)只复制元素自身的属性,不复制原型链上的if(target.hasOwnProperty(item)newObjitem=typeoftargetitem=object?deepCopy(targetitem):targetitem/判断属性值类型returnnewObj/测试vartest=1,a,name:lei,age:18;varcopy2=deepCopy(test);copy22.name=zhangconsole.log(test);/1,a,name:lei,age:18未受到影响总结一定要理解造成浅拷贝的原因:对象类型数据复制时,复制了引用地址,用的还是同一个数据对象;所以实现深拷贝的方式就是要对对象类型属性值递归进行深拷贝,避免直接赋值。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号