在js裡,除array和object之外的資料型別的複製可以直接通過等號=來實現,但array和object型別的資料通過等號只是起引用作用,指向的是同一塊記憶體位址。當源資料改變,引用的資料也同時會發生變化。因此若要複製這兩類資料型別就必須對它們裡邊的每乙個元素都逐個進行複製,可以通過迭代實現。
let
util = ( ()=> ;
let istype=(obj, type)=>;
return
})();
// 將obj物件傳入,return乙個複製後的物件出來
letdeepcopy = (obj1) =>
let i;
// 根據目標是array型別還是object來設定目標引數的型別
let target = util.istype(obj1, 'array') ? : {};
for (i in obj1)
target[i] = obj1[i]
}return target
};let a1=;
let b1=deepcopy(a1);
console.log(b1); //
a1.a=2;
console.log(deepcopy(a1)); //
console.log(b1); //
可以看出,當源資料發生變化時,深度複製後的資料不會隨之改變。
當然也可以用簡單點的方法。
let
deep=(sourceobj)=>
js深度複製物件
js在處理複雜資料的時候,可能會涉及到引用型別的物件或者陣列的copy問題,下面是兩種複製物件或陣列的方法 一 利用jquery自帶的方法,呼叫簡單方便 淺層複製 只複製object根級的各個值 var newobject jquery.extend oldobject 深層複製 會複製整個 包括根...
淺度複製 深度複製
深度複製 deep copy 從乙個變數到另乙個變數按值複製物件,即產生乙個和原物件相同的並且沒有任何引用聯絡的物件。淺度複製 shallow copy 只複製物件的基本型別,而引用型別仍屬於原來的物件。可以使用systrm.object的memberwiseclone 方法來完成,這是乙個受保護的...
C 例項複製和深度複製
深度複製與淺表複製的區別在於,淺表複製只複製值型別的值,而對於例項所包含的物件依然指向原有例項。csharp view plain copy class program serializable public class person icloneable public person intid,s...