js_深拷貝對象

深拷貝和淺拷貝的區別:深拷貝和淺拷貝的使用場景是在複雜對象裏,即對象的屬性還是對象,
淺拷貝是指只複製一層對象,當對象的屬性是引用類型時,實質複製的是其引用,當引用指向的值改變時也會跟着變化
//深拷貝對象
function deepCopy(value){
    if(typeof value != 'object'){
        return value;
    }
    let o = value.constructor == Array ? [] :{};
    if(o instanceof Array){
        for(let key of Object.keys(value)){
            o[key] = deepCopy(value[key]);
        }
    }else{
        for(let i in value){
            o[i] = deepCopy(value[i]);
        }
    }
    return o;
}
let a=[11,[2,3,[4]],5,7,[9]];
let b = {
    a:{g:6},
    b:1,
    c:{
        d:{
            e:4
        },
        f:5
    }
}
let c = deepCopy(a);
let d = deepCopy(b);

//淺拷貝,只copy第一層的屬性值,如果屬性值是對象,則複製的是這個對象的引用。
function shallowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return dst;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章