JS 實(shí)現(xiàn)值復(fù)制

題目要求

實(shí)現(xiàn)一個函數(shù)clone,可以對JavaScript中的5種主要的數(shù)據(jù)類型(包括Number、String、Object、Array、Boolean)進(jìn)行值復(fù)制

代碼

    function clone(data){
        if(Array.isArray(data)){
           //引用數(shù)據(jù)類型:Array
            let newArr = [];
            for(let i in arr){
                newArr[i] = clone(data[i]);
            }
            return newArr;
        }else if(data instanceof Object) {
           //引用數(shù)據(jù)類型:Object
            let newObj = {};
            for(let key in data){
                newObj[key] = clone(data[key]);
            }
            return newObj;
          
        }else{
            //基礎(chǔ)數(shù)據(jù)類型
            return data;
        }
    
    }
   

代碼分為三種情況

1.Object的復(fù)制“
//復(fù)制對象obj
const obj = {name: 'yujuan',hobbies:{outgoing:"play",indoor:"sing"}};
2.Array的復(fù)制:
//復(fù)制數(shù)組arr
const arr = [1,2,3,4];
這兩種情況中為什么要遞歸調(diào)用clone()函數(shù)呢,是為了避免直接復(fù)制引用,舉個例子

let obj1 = new Object();
let obj2 = obj1;
obj1.name = "Mary";
alert(obj2.name);//"Mary"

首先,obj1保存了對象的一個新實(shí)例,然后這個值被復(fù)制到obj2中,那么此時obj2就和obj1指向堆內(nèi)存的同一個對象


所以我們不能直接復(fù)制引用,而是應(yīng)該新建一個空對象,然后將值復(fù)制給空對象,切記不是復(fù)制引用。

3.基礎(chǔ)數(shù)據(jù)類型比如Number、String、Boolean的復(fù)制,這個最簡單,直接返回就好

有不懂的地方歡迎留言~

每天都努力一點(diǎn)點(diǎn)
謝謝你看完


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容