深複製和淺複製 js物件拷貝的方法

2021-10-10 16:17:03 字數 2402 閱讀 3644

js物件拷貝的方法

物件拷貝的方法是乙個難點,尤其是深拷貝。建議把**都執行下,幫助理解拷貝。

1. 適合情況

json物件的深度轉殖。方法是先json.stringify() 轉為json字串, 再json.parse() 轉為json陣列

2. 缺點:

a. 如果你的物件裡有函式, 函式無法被拷貝下來

b. 無法拷貝copyobj物件原型鏈上的屬性和方法

var obj = 

};// 相同的引用

var obj2 = obj;

console.log(obj2 == obj); //true 直接複製只是複製物件的指標,還指向同乙個物件

//不同的引用

var obj3 = json.parse(json.stringify(obj));

console.log(obj3 == obj) //false 通過json方法複製後的位址不一樣

console.log(obj3);

jquery.extend(object)

概述:

擴充套件jquery物件本身,用來在jquery命名空間上增加新函式。

var obj = 

};var obj2 = $.extend({}, obj);

console.log(obj2 == obj) //false 複製後的位址不一樣

複製物件存在於object原型prototype中

1. 淺拷貝:只是拷貝了基本型別的資料;然而引用型別資料, 只是複製了指標,複製後也是會發生引用。

除了這個是淺拷貝,本文章介紹的其他方法都是深拷貝。

var obj = 

};var obj2 = {};

for (var i in obj)

console.log(obj2);

obj2.y.c.push(4); //給新陣列新增乙個元素4,會同步反映在新舊陣列中

console.log(obj2.y.c); // [1,2,3,4]

console.log(obj.y.c); // [1,2,3,4] 淺拷貝只是複製了位址,修改是記憶體中的資料

2. 深拷貝深拷貝, 就是遍歷那個被拷貝的物件。判斷物件裡每一項的資料型別。如果不是物件型別, 就直接賦值, 如果是物件型別, 就再次呼叫遞迴的方法去賦值。

var obj = 

};function getclass(o)

function deepcopy(obj) ; //判斷傳入的如果是物件,繼續遍歷

else if (oclass == "array") result = ; //判斷傳入的如果是陣列,繼續遍歷

else return obj; //如果是基本資料型別就直接返回

}//通過原型來繼承父類的公共屬性

原文連線:

js 深複製(深拷貝)和淺複製(淺拷貝)的區別

最近在做專案的時候,發現deepcopy 這個函式,顧名思義是深複製的意思,有了深複製反向思考肯定有淺複製,查閱資料之後便做下整理 個人理解,深複製和淺複製最根本的區別在於 是否是真正獲取了乙個物件的複製實體而不是乙個引用 從深層次上講深複製在計算機中開闢了一塊記憶體位址用於存放複製的物件,而淺複製...

js深複製淺複製

深淺複製主要是針對於js的引用資料型別的,因為他們不只一層,並且修改乙個變數是不希望修改到另外乙個變數。淺複製 只複製指向某個物件的指標,新舊物件共享一塊記憶體,修改新物件會改到原物件上。深複製 不共享記憶體,修改新物件不會改到原物件上。淺複製實現 js 簡單的賦值操作一般實現的都是淺複製。深複製實...

Python深複製淺複製or深拷貝淺拷貝

簡單點說 1.copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。2.copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很...