js實現深淺拷貝

2021-09-28 20:53:43 字數 2486 閱讀 7041

一、實現淺拷貝的方法

(1)直接用=賦值

let a=[0

,1,2

,3,4

],b=a;

console.

log(a===b);a[

0]=1

;console.

log(a,b)

;//兩個相同的[1,1,2,3,4]

(2)for···in只迴圈第一層

// 只複製第一層的淺拷貝

function

******copy

(obj1)

;for

(let i in obj1)

return obj2;

}var obj1 =

}var obj2 =

******copy

(obj1)

;obj2.a =3;

obj2.c.d =4;

alert

(obj1.a)

;// 1

alert

(obj2.a)

;// 3

alert

(obj1.c.d)

;// 4

alert

(obj2.c.d)

;// 4

(3)object.assign方法

var obj =

var obj1 = object.

assign

(,obj)

;obj1.a =3;

console.

log(obj.a)

// 3

二、實現深拷貝的方法

(1)手寫乙個深拷貝函式。

function

deepclone

( obj )

;for

(var prop in obj)

result[prop]

=deepclone

( obj[prop]);

}}return result;

}

(2) 通過json物件來實現深拷貝

function

deepclone

(obj)

(3)通過jquery的extend方法實現深拷貝

var array =[1

,2,3

,4];

var newarray = $.

extend

(true,[

],array)

;// true為深拷貝,false為淺拷貝

(4)用slice實現對陣列的深拷貝

// 當陣列裡面的值是基本資料型別,比如string,number,boolean時,屬於深拷貝

// 當陣列裡面的值是引用資料型別,比如object,array時,屬於淺拷貝

var arr1 =

["1"

,"2"

,"3"];

var arr2 = arr1.

slice(0

);arr2[1]

="9"

;console.

log(

"陣列的原始值:"

+ arr1 )

;console.

log(

"陣列的新值:"

+ arr2 )

;

(5)用concat實現對陣列的深拷貝

// 當陣列裡面的值是基本資料型別,比如string,number,boolean時,屬於深拷貝

var arr1 =

["1"

,"2"

,"3"];

var arr2 = arr1.

concat()

;arr2[1]

="9"

;console.

log(

"陣列的原始值:"

+ arr1 )

;console.

log(

"陣列的新值:"

+ arr2 )

;// 當陣列裡面的值是引用資料型別,比如object,array時,屬於淺拷貝

var arr1 =[,

,];var arr2 = arr1.

concat()

;arr2[0]

.a =

"9";

console.

log(

"陣列的原始值:"

+ arr1[0]

.a )

;// 陣列的原始值:9

console.

log(

"陣列的新值:"

+ arr2[0]

.a )

;// 陣列的新值:9

js物件實現深淺拷貝!!

物件淺拷貝 function objshallowcopy obj for var i in obj return obj2 物件深拷貝 function objdeepcopy obj1,obj2 最初的時候給他乙個初始值 它自己或者乙個json for var name in obj1 將要複製...

JS深 淺拷貝

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。object array 這兩個就是引用型別,當我門直接去拷貝的話 copyobj obj 拷貝的...

js 深淺拷貝

深拷貝就是複製內部內容 淺拷貝就是複製記憶體位址 var obj 淺拷貝 引用傳遞 淺拷貝就是賦值,將鑰匙複製乙份 var o obj 深拷貝 內部內容複製乙份 將房子複製乙份 方法一 var str json stringify obj var obj3 json parse str 方法二 va...