js的深淺拷貝

區別:
深淺拷貝主要的區別的拷貝的層級不同,淺拷貝拷貝的是一層不包括裏面的引用數據類型,深拷貝的是多層

實現方式:淺

function shallClone (obj) {
    var obj_kkw = {}; // 拷貝完成後的對象
    for ( var i in obj) {
        if(obj.hasOwnProperty(i)) { // 如果還拷貝原型對象就刪了這句
        obj_kkw[i] = obj[i]
        }
    }
    return obj_kkw;
}

深:深拷貝需要判斷引用數據類型,貌似還要調用遞歸的方式。
function deep (ori,tar) {
    var tar = tar || {}
    var tostr = Object.prototype.toString;
    var arrstr = '[object Array]';
    
    for ( let prop in ori) {
         if(ori.hasOwnProperty(prop)) {
             if(ori[prop] !== null && typeof(ori[prop]) == 'object') {
                 if(tostr.call(ori[prop]) == arrstr) {
                     tar[prop] == [];
                 } else {
                     tar[prop] == {};
                 }
                 deep (ort[prop], tar[prop]); 
             } else {
                 tar[prop] == ori[prop]
             }
         }   
     }
     return tar;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章