浅拷贝和深拷贝

基本概念

浅拷贝:只拷贝基本数据类型,对于引用数据类型拷贝的是它的地址

深拷贝:将原对象的所有数据都进行拷贝,并且开辟新的内存空间

浅拷贝的几种方式:

  • 直接赋值
  • 使用Object.assign(origin,target1,target2)
  • 使用Array.slice/concat
  • 使用扩展运算符...
  • 使用jQuery中的$.extend([deep],target,object1,[object2...]),deep为false时为浅拷贝

深拷贝的几种方式:

  • 使用JSON.parse(JSON.stringify(target)),只能对对象或者数组使用
  • 使用jQuery中的$.extend([deep],target,object1,[object2...]),deep为true时为深拷贝
  • 手写递归实现
function deepClone(target){
    let result;
    // 如果为对象
    if(typeof target === 'object'){
        //是否为数组
        if(Array.isArray(target)){
            result = [];
            for(let i in target){
                result.push(deepClone(target[i]));    
            }
        }else if(target === null){
            result = null;    
        }else if(target.construct === RegExp){
            result = target;
        }else if(target.construct === Date){
            result = target;
        }else{
            result = {};
            for(let i in target){
                result[i] = deepClone(target[i])
            }
        }
    }else{//不为对象直接赋值
        result = target
    }
    return result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值