卡火火不吃皮皮鱼 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日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分