JavaScript递归实现对象深拷贝

   let personOne = {
            name:"张三",
            age:18,
            sex:"male",
            children:{
                first:{
                    name:"zhang",
                    age:13
                },
                second:{
                    name:"小三"
                }
            },
            car:['benz','mazda']
        }

        let personTwo = deepClone(personOne);
        personTwo.car.push([1,2,3]);
        personTwo.children.fron = {
            name:'xiao'
        }
        console.log(personOne,personTwo);

        //对象深拷贝
        function deepClone(origin,target){
            //target是否存在如果不存在创建空对象
            let tar = target || {},
            //判断是否为引用数据类型
                toStr = Object.prototype.toString,
                arrType='[object Array]';

            for(let key in origin){
                //剥离原型链的数据
                if(origin.hasOwnProperty(key)){
                    //判断是否为引用数据类型 对象或数组
                    if(typeof(origin[key]) === 'object' && origin[key] !== null){
                        if(toStr.call(origin[key]) === arrType ){
                            tar[key] = [];
                        }else{
                            tar[key] = {};
                        }
                        deepClone(origin[key],tar[key]);
                    }else{
                        tar[key] = origin[key];
                    }
                }
            }
            return tar;
        }
       

希望能够帮助到你们!

原文地址:https://www.cnblogs.com/y-y-y-y/p/10509013.html