码迷,mamicode.com
首页 > Web开发 > 详细

js手写深拷贝的实现

时间:2020-05-16 00:28:33      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:简单   eof   one   引用数据类型   实现   object   引用   key   rop   

一、深浅拷贝的定义:

1、对于简单数据类型要实现深拷贝,用简单的复制方法即可;

2、对于引用数据类型,若用简单的复制语句,就只是复制了数据的地址,若源对象发生改变,那么复制的数据也会发生改变,这时就需要深浅拷贝来实现了;浅拷贝是针对一层的复制,即对象中的元素是基本数据类型;当对象的元素不是基本数据类型时,即多层,将用到深拷贝的方式;

二、手写一个通用的拷贝函数

该函数对简单数据类型和引用数据类型都能实现深拷贝

而对于引用数据类型的一层和多层都适用

function copyObj(obj){
        var cloneObj;
        //当输入数据为简单数据类型时直接复制
        if(obj&&typeof obj!==‘object‘){cloneObj=obj;}
        //当输入数据为对象或数组时
        else if(obj&&typeof obj===‘object‘){
            //检测输入数据是数组还是对象
            cloneObj=Array.isArray(obj)?[]:{};
            for(let key in obj){
                if(obj.hasOwnProperty(key)){
                    if(obj[key]&&typeof obj[key]===‘object‘) {
                        //若当前元素类型为对象时,递归调用
                        cloneObj[key] = copyObj(obj[key]);
                    }
                    //若当前元素类型为基本数据类型
                    else{cloneObj[key]=obj[key];}
                }

            }
        }
        return cloneObj;

    }

 

js手写深拷贝的实现

标签:简单   eof   one   引用数据类型   实现   object   引用   key   rop   

原文地址:https://www.cnblogs.com/xgxxx/p/12897894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!