间歇性笔记——浅拷贝与深拷贝

clone&cloneDeep

关于浅拷贝与深拷贝的一些笔记---

浅拷贝

  • 直接赋值;
    • 任何操作都会影响原数组;
    let obj2 = obj1;
    复制代码
  • Object.assign;
    • 拷贝属性值,假如属性值是一个对象的引用,那么也会指向那个引用;
    let obj2 = Object.assign({},obj1);
    复制代码
  • Array.prototype.concat();
    • 合并多个数组;
    • 拷贝规则同Object.assign;
    let arr2 = arr1.concat(...arr);
    复制代码
  • Array.prototype.slice();
    • 提取数组;
    • 参数(可选):startIndex,endIndex(与索引值一致);
    • 拷贝规则同Object.assign;
    let arr2 = arr1.slice(start,end);
    复制代码
  • 扩展运算符(...);
    • 拷贝规则同Object.assign;
    let obj2 = {obj1} or [...obj1];
    复制代码
  • lodash(_.clone());
    • 拷贝规则同Object.assign;
    let obj2 = _.clone(obj1);
    复制代码

深拷贝

  • JSON.parse(JSON.stringify());
    • 不能拷贝函数;
    let obj2=JSON.parse(JSON.stringify(obj1));
    复制代码
  • 递归赋值;
    • 额额额...函数是什么---
    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;
    }
    复制代码
  • lodash(_.cloneDeep());
    let obj2 = _.cloneDeep(obj1);
    复制代码

转载于:https://juejin.im/post/5cb03af36fb9a0685b48f680

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值