js手寫深拷貝的實現


一、深淺拷貝的定義:

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;

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM