JS實現深拷貝

2022-02-01 03:39:57 字數 1082 閱讀 8452

缺點:

(1)如果物件裡有函式,函式無法被拷貝下來

(2)無法拷貝copyobj物件原型鏈上的屬性和方法

(3)當資料的層次很深,會棧溢位

function deepcopy( source )  //陣列相容

for ( var k in source ) else }}

return target

}function isobject(obj)

缺點:

(1)無法保持引用

(2)當資料的層次很深,會棧溢位

function cloneloop(x) ;

// 棧

const looplist = [

];while(looplist.length) ;

}for(let k in data) );

} else }}

}return root;

}

優點:

(1)不會棧溢位

(2)支援很多層級的資料

function copyobject(orig) 

function copyownpropertiesfrom(target, source) );

return target;

} var obj = ;

var obj2 = copyobject(obj);

console.log(obj2);

obj.age = 39;

obj.name = 'tom';

console.log(obj);

console.log(obj2);

js實現深拷貝

深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...

JS 深拷貝實現

web平台上一直在刻意的避開深拷貝,一直使用json.parse json.stringify object 避開深拷貝的問題。知道今天碰見個bug,json將function轉化為了字串,排到這個bug時,憔悴 若是node.js平台的話,一直現成的輪子等著挑,可惜是web,不太敢亂引入,手寫乙個...

js實現深拷貝

var obj var newobj obj console.log newobj obj.number 2 console.log obj console.log newobj 發現此時newobj的number也變成了2,很顯然這不是我們想要的結果。往往我們開發專案中會大量用到賦值,卻發現之前原...