JS中淺拷貝和深拷貝的使用,深拷貝實現方法總結

2021-09-26 19:34:47 字數 1308 閱讀 3276

1、淺拷貝:兩個物件經過拷貝後雖然具有相同的屬性,但是他們都指向同乙個記憶體空間。操作會引起引用,同一位址的變數一起改變。

let a = 

let b = a

b.x = 2

console.log(b) //

console.log(a) //

2、深拷貝:兩個物件除了拷貝了一樣的屬性, 沒有任何其他關聯(指向不同的記憶體空間)。

實現深拷貝的方法:

(1)es5for迴圈賦值

//普通物件,單層屬性

let souceobj =

function clone(souceobj, targetobj = {})

return targetobj}

let targetobj = clone(souceobj)

targetobj.x = 10

console.log(souceobj) //

console.log(targetobj) //

(2)json parse stringify

let souceobj = 

let targetobj = json.parse(json.stringify(souceobj))

targetobj.x = 10

console.log(souceobj) //

console.log(targetobj) //

let targetobj =

targetobj.x = 10

console.log(souceobj) //

console.log(targetobj) //

(4)es6object.assign()

let souceobj = 

let targetobj = object.assign({}, souceobj)

targetobj.x = 10

console.log(souceobj) //

console.log(targetobj) //

(5)遞迴深拷貝

function deepcopy(obj) ;

for (let key in obj)

} return newobj;

}

前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝

面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...