淺拷貝與深拷貝的實現

深淺拷貝的方法(兩種)

淺拷貝 : 如遇到引用型數據,就是複製內存地址
深拷貝 : 複製引用型數據,不是內存地址數組

//第一種
var obj1 = {
    name : ["SJL", "YL"],
    age : {
        age : 18
    }
};
//拷貝的只有數組和JSON對象,以這兩個爲例
function clone(data, deep){
    //deep參數 : true爲深拷貝 false爲淺拷貝
    var obj = {}; //初始爲對象
    if(data instanceof Array){
        //data instanceof Array :肯定Array是否存在於傳入數據對象的原型鏈上,若是存在則表示是數組,反之爲{}
        //能進來則必定是數組,因此
        obj = [];
    }
    //for in 遍歷
    for(var key in data){
        var value = data[key]; //存值
        if(deep && typeOf value === "object" && value !=== null){
            obj[key] = clone (value, deep);
        /*當deep爲true 而且類型爲object 而且不爲null,則再進行一次深拷貝,typeOf null 爲object*/
        }else{
            obj[key] = value;
        }
    }
    return obj ;
}
var obj2 = clone(obj1, false);
複製代碼

//第二種
//用JSON.stringify和JSON.parse方法
var obj1 = {
    x : ["1", "2"],
    y : {
        name : "SJL"
    }
};
var obj2 = JSON.parse(JSON.stringify(obj1));
//先用JSON.stringify()將對象轉成字符串,再用JSON.parse()轉爲對象
//注: stringify會過濾function
複製代碼
相關文章
相關標籤/搜索