JS深淺拷貝

2022-05-23 15:30:16 字數 2795 閱讀 1953

1.淺拷貝:

將原物件或原陣列的引用直接賦給新物件,新陣列,新物件/陣列只是原物件的乙個引用;

2.深拷貝:

建立乙個新的物件和陣列,將原物件的各項屬性的「值」(陣列的所有元素)拷貝過來,是「值」而不是「引用」;

使用深拷貝的場景:

在改變新的陣列(物件)的時候,不改變原陣列(物件);

1.for迴圈遍歷陣列;

var array = [1, 2, 3, 4, 5];

function

copy(array) 

return

newarray;

}var copyarray =copy(array);

copyarray[0] = 100;

console.log(array); 

//[ 1, 2, 3, 4, 5 ]

console.log(copyarray); //

[ 100, 2, 3, 4, 5 ]

2.for

in遍歷陣列;

var array = [1, 2, 3, 4, 5];

function

copy(array) 

return

newarray;

}var copyarray =copy(array);

copyarray[0] = 100;

console.log(array); 

//[ 1, 2, 3, 4, 5 ]

console.log(copyarray); //

[ 100, 2, 3, 4, 5 ]

3.silce(); //

當slice()不帶任何引數的時候,預設返回乙個長度和原陣列相同的新陣列

注意:利用slice();方法不改變原陣列的特性

var array = [1, 2, 3, 4, 5];

var copyarray =array.slice();

copyarray[0] = 100;

console.log(array); 

//[1, 2, 3, 4]

console.log(copyarray); //

[100, 2, 3, 4]

4.concat(); //

用於連線兩個或多個陣列。( 該方法不會改變現有的陣列,而僅僅會返回被連線陣列的乙個副本。)

var array = [1, 2, 3, 4, 5];

var copyarray =array.concat();

copyarray[0] = 100;

console.log(array); 

//[1, 2, 3, 4]

console.log(copyarray); //

[100, 2, 3, 4];

1.直接遍歷;

var obj =

var obj2 ={};

for (var i in

obj) 

obj2.name = "root";

console.log(obj);

//     console.log(obj2); //

2.object.assign:用於物件的合併,將源物件(source)的所有可列舉屬性,複製到目標物件(target),並返回合併後的target

//es6提供;

用法: object.assign(target, source1, source2);

var obj =

var copyobj =object.assign({}, obj);

copyobj.name = '這是拷貝後的name';

console.log(obj); 

//     console.log(copyobj); //

var array =,

proarr: [1, 2, 3, 4],

proobj: ,

profn2:

function

(m, n) ,

proobj2: }};

var copyarray =json.parse(json.stringify(array))

copyarray.name = "101";

console.log(array);

// console.log(copyarray); //

var obj1 =,

proarr: [1, 2, 3, 4],

proobj: ,

profn2: 

function

(m, n) ,

proobj2: }}

console.log(obj1);

//, profn2: profn2(), proobj2: }

function

copyfn(obj) 

var result = array.isarray(obj) ? : {};

for (var key in

obj)  else}}

return

result;

}var obj2 =copyfn(obj1);

obj2.name = 'edited';

console.log(obj1); 

//, profn2: profn2(), proobj2: }

console.log(obj2); //

, profn2: profn2(), proobj2: }

JS深 淺拷貝

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

js 深淺拷貝

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

js深淺拷貝

1.什麼是深淺拷貝 簡單的來說,加入b複製a a改變 如果b也跟著改變的話,那就是淺拷貝,反之是深拷貝 實現淺拷貝方法 1.賦值操作 var a 0 1,2 3,4 var b a a 0 5console log a 5,1,2,3,4 console log b 5,1,2,3,4 2.es6 ...