JS中的深拷貝

藍莓_酸牛乳發表於2018-06-19

前言:我們經常會遇到想要將一個物件為己所用,但又不能汙染原物件的需求,這就涉及到了js物件的深拷貝。 比如說在VUE的子元件中,父元件傳過來的資料中若是有物件,而子元件需要用父元件的資料進行初始化並且有另做他用的需求。

常規深拷貝

function deepCopy(obj){
    let str,copyObj = obj.constructor === Array ? [] : {};
    if(typeof(obj) != 'object'){
        return;
    }else if(window.JSON){
        copyObj = JSON.parse(JSON.stringify(obj));
    }else{
        for(let i in obj){
            copyObj[i] = typeof(obj[i]) === 'object' ? deepCopy(obj[i]) : obj[i];
        }
    }
    return copyObj;
}
複製程式碼

存在的問題:不能對特殊物件進行深拷貝【函式、日期物件、正則物件】,以及迴圈引用的問題。

對特殊物件的拷貝----結構化拷貝

結構化拷貝

相關文章