js常用方法 1 js深拷貝

2021-10-05 15:19:10 字數 2159 閱讀 8469

什麼是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...