浅拷贝和深拷贝

本文详细介绍了在JavaScript中实现深拷贝的各种方法,包括使用数组和对象的基本方法、JSON.stringify和JSON.parse,以及通过递归函数实现复杂数据结构的深拷贝。同时,还讨论了这些方法的优点和局限性。

单层数据深拷贝:

concat slice  Object.assign()    展开运算符...

demo:

let arr=[2,3,4,5];

let arr1=[].concat(arr);

let arr2=arr1.slice(0);

let arr3=[...arr1];

let arr4=Object.assign([],arr1);

 

但是如果多层数据,就不行了,就是slice和concat只能实现首层深拷贝

多层数据深拷贝可以使用JSON.stringfy JSON.parse

let obj={name:'zhangsan',arr:[2,3,4,5],obj:{age:2,sex:'male'}};

let obj1=JSON.parse(JSON.stringfy(obj));

但是元素不能是undefined和function(在转换过程中会被忽略)

深层拷贝实现使用递归:

function deepClone(obj){
                const targetObj=Object.prototype.toString.call(obj)=="[Object Array]"?[]:{};
                for(let key in obj){
                    if(obj.hasOwnProperty(key)){
                        if(targetObj[key]&&typeof targetObj[key]=='object'){
                   targetObj[key]=deepClone(targetObj[key]);
              }else{ targetObj[key]=obj[key]; } } } return targetObj; }

 也可以借助jquery的extend方法实现深拷贝:

$.extend([deep],targetObj,obj1 [,objn]);

deep表示是否深拷贝,为true为深拷贝,为false则为浅拷贝

let obj={a:2,b:3,obj:{c:4,d:5}};

let obj1=$.extend(true,{},obj);

转载于:https://www.cnblogs.com/xiaofenguo/p/10650387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值