一、實現淺拷貝的方法
(1)直接用=賦值
(2)for···in只迴圈第一層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]
(3)object.assign方法// 只複製第一層的淺拷貝
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
二、實現深拷貝的方法var obj =
var obj1 = object.
assign
(,obj)
;obj1.a =3;
console.
log(obj.a)
// 3
(1)手寫乙個深拷貝函式。
(2) 通過json物件來實現深拷貝function
deepclone
( obj )
;for
(var prop in obj)
result[prop]
=deepclone
( obj[prop]);
}}return result;
}
(3)通過jquery的extend方法實現深拷貝function
deepclone
(obj)
(4)用slice實現對陣列的深拷貝var array =[1
,2,3
,4];
var newarray = $.
extend
(true,[
],array)
;// true為深拷貝,false為淺拷貝
(5)用concat實現對陣列的深拷貝// 當陣列裡面的值是基本資料型別,比如string,number,boolean時,屬於深拷貝
// 當陣列裡面的值是引用資料型別,比如object,array時,屬於淺拷貝
var arr1 =
["1"
,"2"
,"3"];
var arr2 = arr1.
slice(0
);arr2[1]
="9"
;console.
log(
"陣列的原始值:"
+ arr1 )
;console.
log(
"陣列的新值:"
+ arr2 )
;
// 當陣列裡面的值是基本資料型別,比如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...