JavaScript中的深拷贝与浅拷贝

JavaScript中的深拷贝与浅拷贝

参考博客:https://www.cnblogs.com/echolun/p/7889848.html

1.什么是深拷贝与浅拷贝

  假设B复制了A,当修改A时,看B是否会发生变化。

  1. 深拷贝:B不随A改变
  2. 浅拷贝:B随着A改变

2.浅拷贝的产生的原因

  根据引用类型的性质我们可以知道,令b=a仅仅能使b通过复制获得a的引用地址,或者说是指向a的内容的指针,因此会形成浅拷贝。

3.一些特殊情况

  array.slice()和array.concat()都可以对一级属性实现深拷贝,但是对其他属性则依旧是浅拷贝。

4.实现深拷贝的方法

  1. JavaScript封装一个深拷贝函数
function deepClone(obj){
    let objClone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj === "object"){
        for(key in obj){
            if(obj.hasOwnProperty(key)){
                //判断ojb子元素是否为对象,如果是,递归复制
                if(obj[key] && typeof obj[key] ==="object"){
                    objClone[key] = deepClone(obj[key]);
                }
                else{
                    //如果不是,简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}    
  1. 使用JSON对象的parse和stringify
function deepClone(obj){
    let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
}    
  1. 使用jQuery的extend方法
$.extend( [deep], target, object1 [, objectN ] );
let a=[0,1,[2,3],4],
    b=$.extend(true,[],a);

其中,deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝;target为目标对象,其他对象的成员属性将被附加到该对象上;object1 object(可选)第一个以及第N个被合并的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值