js的淺拷貝和深拷貝和應用場景

2021-09-14 02:47:23 字數 1164 閱讀 4074

首先來看一下如下**

let a = b = 2

a = 3

console.log(a)

console.log(b)

let c = d = [1,2,3]

let e = f =

c[0] = 2

e.a = 2

console.log(d[0])

console.log(f.a)

你會發現,同乙個array或者object賦值給兩個不同變數時,變數指向的是同乙個記憶體位址,所以就會造成其中乙個變數改變屬性值,同時改變了另外乙個變數的對應屬性值。

而大多數實際專案中,我們想要的結果是兩個變數(初始值相同)互不影響。所以就要使用到拷貝(分為深淺兩種)
淺拷貝只複製一層物件的屬性,而深拷貝則遞迴複製了所有層級。

淺拷貝有效性針對的是單一層級物件[1,2,3]或者

深拷貝有效性針對的是單層或者多層級物件[1,2,3]或者或者[1,[1],]或者}

// 陣列

let a = [1,2]

let b = a.slice()

// {}

let e = ,2}

let f = object.create(e)

function shallowcopy (obj) else

object.keys(obj).foreach((item,i) = > )

return result

}} else

}

// 利用json(它能正確處理的物件是number, string, boolean, array, 扁平物件)

let g = json.parse(json.stringify(obj))

// 適用於

function deepcopy (obj) else

} else

}objkeys.foreach((item) =>

} else

})return result

} else

}

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

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...