什麼是js深拷貝?
當每個物件的值都指向同乙個堆記憶體,這樣的話不便於我們做操作,所以誕生了js深拷貝
深拷貝作用在引用型別上,例如:object,array
深拷貝不會拷貝引用型別的引用,而是將引用型別的值全部拷貝乙份,形成乙個新的引用型別,這樣就不會發生引用錯亂的問題,使得我們可以多次使用同樣的資料,而不用擔心資料之間會起衝突
object 物件
第一種 最簡單且容易理解的,利用es6擴充套件運算子
var obj1 =
var= obj
obj2.a =5;
console.
log(obj1.a)
;// 1
console.
log(obj2.a)
;// 5
第二種 轉換成json再轉換成物件實現物件的深拷貝
var obj1 =
var obj2 =
json
.parse
(json
.stringify
(obj)
)obj2.a =5;
console.
log(obj1.a)
;// 1
console.
log(obj2.a)
;// 5
第三種 for 迴圈實現陣列的深拷貝
function
copyobj
(obj)
for(
var key in obj)
return res
}var obj1 =
var obj2 =
copyobj
(obj1)
obj2.a =5;
console.
log(obj1.a)
;// 1
console.
log(obj2.a)
;// 5
array 陣列
第一種 最簡單且容易理解的,利用es6擴充套件運算子
var arr1 =[1
,2,3
]var
[...arr2 ]
= arr1
arr2[0]
=5console.
log(arr1[0]
);// 1
console.
log(arr2[0]
);// 5
第二種 for 迴圈實現陣列的深拷貝
function
copyarr
(arr)
return res
}var arr1 =[1
,2,3
]var arr2 =
copyarr
(arr1)
arr2[0]
=5console.
log(arr1[0]
);// 1
console.
log(arr2[0]
);// 5
第三種 slice 方法實現陣列的深拷貝
var arr1 =[1
,2,3
]var arr2 = arr.
slice(0
)arr2[0]
=5console.
log(arr1[0]
);// 1
console.
log(arr2[0]
);// 5
第四種 concat 方法實現陣列的深拷貝
var arr1 =[1
,2,3
]var arr2 = arr1.
concat()
arr2[0]
=5console.
log(arr1[0]
);// 1
console.
log(arr2[0]
);// 5
js 深拷貝方法
object 方法 object.assign target,source 將源拷貝到目標,切返回目標 es6 擴充套件運算子 陣列方法 slice concat,es6擴充套件運算子 複製 json序列化 let obj let str json.strify obj json.parse str...
js物件深拷貝方法
json.stringify 是目前前端開發過程中最常用的深拷貝方式,原理是把有個物件序列化成為乙個 json 字串,將物件的內容轉換成字串的形式再儲存到磁碟上,再用json.parse 反序列化將 json 字串變成乙個新的物件 1 let obj1 56 let str json.stringi...
js深轉殖深拷貝
不足之處是不能拷貝函式,但是基本夠用 const deepcopy obj json parse json stringify obj 如果涉及拷貝函式 簡單一點 function copy object for const k,v of object.entries object return o...