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