javascript中的深拷貝和淺拷貝?

2021-08-04 16:02:17 字數 1282 閱讀 9501

一、jquery的$.extend 淺拷貝與深拷貝

$.extend( [deep ], target, object1 [, objectn ] );

deep 

型別: boolean

如果是true,合併成為遞迴(又叫做深拷貝)。

target

型別: object

object1

型別: object

乙個物件,它包含額外的屬性合併到第乙個引數。

objectn

型別: object

包含額外的屬性合併到第乙個引數。

$.extend淺拷貝:

var obj1 = ;

var obj2 = ;

$.extend(obj1,obj2);

obj1-----> //被obj2覆蓋

$.extend深拷貝:

var obj1 = ;

var obj2 = ;

$.extend(true,obj1,obj2);

缺點:不過這有侷限性:無法複製函式,原型鏈沒了,物件就是object,所屬的類沒了

二、淺拷貝

把父物件的屬性,全部拷貝給子物件,也能實現繼承。
function

extendcopy

(p) ;

for (var i in p)

c.uber = p;

return c;

}

三、深拷貝

所謂」深拷貝」,就是能夠實現真正意義上的陣列和物件的拷貝。它的實現並不難,只要遞迴呼叫」淺拷貝」就行了。

function

deepcopy

(p, c) ;

for (var i in p) ;

deepcopy(p[i], c[i]);

} else

}return c;

}

總結:

淺複製--->就是將乙個物件的記憶體位址的「」編號「」複製給另乙個物件。

深複製--->實現原理,先新建乙個空物件,記憶體中新開闢一塊位址,把被複製物件的所有可列舉的(注意可列舉的物件)屬性方法一一複製過來,注意要用遞迴來複製子物件裡面的所有屬性和方法,直到子子.....屬性為基本資料型別。總結:1,新開闢記憶體位址,2,遞迴來刨根複製。

JavaScript中的深拷貝和淺拷貝

通俗的說,二者之前最大的不同就是它們的賦值方式。深拷貝的賦值方式就是值賦值,淺拷貝的賦值方式就是物件賦值。下面具體寫兩個例子來使你更加易懂。深拷貝 let a 5 let b a b 10 console.log a 輸出a 5 console.log b 輸出b 10 a和b的值是各自的,互相並沒...

javascript中的深拷貝和淺拷貝

一 遇到的問題 寫了以下的一段js var a a,b,c var c a c.push d 然後console.log a 會發現a中也多了d 二 查詢資料並找到原因 因為在js中,物件和陣列都是引用傳遞,所謂引用傳遞就是當變數c賦值為陣列a後,a和c便指向了同乙個位址,這個位址的值便是 a,b,...

javascript中的深拷貝和淺拷貝

前拷貝 var obj var obj1 for var i in obj console.log obj1 深拷貝 var obj 封裝深拷貝 function deepcopy obj,obj1 else 在利用遞迴處理 複雜型別陣列 deepcopy obj key obj1 key var ...