卡火火不吃皮皮鱼 2022-11-17 18:59 采纳率: 100%
浏览 15
已结题

如何在研究深拷贝时,敲完代码控制台报错说ff对象未定义,检查了一下和博主敲得代码一样的啊,百度了有些是说把js代码放在后面?

在研究深拷贝时,敲完代码控制台报错说 f f 未定义,没有拷贝成功 ,检查了一下和博主敲得代码一样的啊,百度了有些是说把js代码放在后面,但是试过还是不行

  function deepClone(source){
        //source是要转的值
        //构造器的指向:[]=> Array(基类) {}=> Object
        const targetObj = source.constructor === Array ? [] : {};
        //通过constructor 判断是数组还是对象
        for(let keys in source){
            //判断他有没有这个属性
            if(source.hasOwnProperty(keys)){
                //当前循环的值可能有哪几种情况
                //keys=>3
                    //引用数据类型
                if(source[keys] && typeof source[keys] === 'object'){
                    targetObj[keys] = source[keys].constructor === Array ? [] : {};
                    //递归,一遍一遍直到查完为止
                    targetObj[keys] = deepClone(source[keys])
                }else{
                    //基本数据类型,直接赋值
                    targetObj[keys]= source[keys];
                }

            }
        }
    }
    let objC={
        ff:'name',
        gg:1,
        obj:{str:'111',age:12},
        arr:[1,2,3,4]
    }
    let newObjC=deepClone(objC);
    newObjC.ff ="花花";
    newObjC.arr.push("火火");
    console.log(objC,newObjC);

  • 写回答

1条回答 默认 最新

  • qq_40567849 2022-11-17 19:30
    关注

    你的deepClone没有return targetObj,所以newObjC是undefined

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 修改了问题 11月17日
  • 创建了问题 11月17日