JS淺拷貝與深拷貝

2021-10-10 12:42:05 字數 1436 閱讀 5184

將乙個obj物件拷貝到另乙個空的o物件

//被拷貝的物件

var obj =

, color:

['red'

,'yellow']}

//拷貝到的物件

var o =

;

1.可以利用for in遍歷obj物件

for

(var k in obj)

console.

log(o)

;

2.利用es5新增方法assign的方法(常用)

要拷貝到的物件, 被拷貝的物件);

object.

assign

(o, obj)

;console.

log(o)

;

注意點:

淺拷貝只能拷貝內容中簡單的資料型別,更複雜的資料型別(比如說array陣列、object物件)只拷貝指向記憶體中儲存資料的位址,也就是說修改拷貝後的資料會影響原來的資料。

o.msg.*** =

'女';

//這裡只修改拷貝到的物件o中的資料

console.

log(obj)

;//輸出的結果原來的obj資料也會被修改

深拷貝拷貝出來的新的物件,修改其中複雜資料型別中的資料不會影響原來的資料。

主要思路是遍歷舊物件,判斷當前資料是不是陣列或物件,如果是就建立乙個空的新物件,遞迴傳入空的新物件和當前資料內容,否則就將舊物件中資料直接賦值給新的物件。

下面是封裝的深拷貝函式**

function

deepcopy

(newobj, oldobj)

else

if(item instanceof

object);

deepcopy

(newobj[k]

, item);}

else}}

deepcopy

(o, obj)

;

這裡要注意必須先判斷陣列,再判斷物件,因為陣列也是屬於物件的。

再提一種簡潔的深拷貝方法(常用)

將物件轉換為字串,再轉化為物件賦值給乙個obj_copy

var obj_copy =

json

.parse

(json

.stringify

(obj));

obj_copy.color[1]

='blue'

;console.

log(obj, obj_copy)

;

js深拷貝與淺拷貝

1 基礎知識 基本型別與引用型別 js中可以把變數分成兩部分,基本型別和引用型別。基本型別包括 undefined null boolean number和string 引用型別值可能由多個值構成的物件。在對基礎型別資料進行拷貝時,實際相當於建立新的相同資料 hello 賦值給b var a hel...

js 淺拷貝與深拷貝

js 有兩種資料型別,基礎資料型別和引用資料型別 基礎資料型別都是按值訪問的,我們可以直接操作儲存在變數中的實際的值。而引用型別如array,1.淺拷貝 只複製指向某個物件的指標,而不複製物件本身,新舊物件共享一塊記憶體 淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用...

js深拷貝與淺拷貝

實現乙個頁面或者乙個功能時,常常遇到的場景需要我們備份乙個陣列或者物件,這時候出現了深拷貝與淺拷貝效果截然不同呀總結如下 var arr 1,2,3,4 shallowarr arr arr 0 change console.log arr console.log shallowarr change...