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 ...