js深拷貝與淺拷貝區別,如何實現深拷貝

2021-10-07 17:52:01 字數 1260 閱讀 3829

首先我們需要弄清楚什麼是淺拷貝,其實我個人覺得淺拷貝從性質上和事件冒泡一樣,當出現這種事件時就代表出問題了

首先要看看js資料的儲存空間

按儲存空間我們可以簡單將js資料分為兩大類

基礎變數,整個存在棧中。

還有一種是匯入型別 例如 陣列 json物件 null等

他們的**名相當於乙個指標,而真正的變數其實在堆中

就比如 我定義 陣列1 然後宣告 陣列2 = 陣列1 當我改變陣列1 時會奇妙的發現陣列2和陣列1發生了同樣的變化

這就叫淺拷貝

那我們如何實現深拷貝呢

json

let obj1 =};

let obj2 =

json

.stringify

(obj1)

;obj2 =

json

.parse

(obj2)

;console.

log(obj2)

;obj2.name =

'小喵喵'

;console.

log(obj1)

;//小咪咪

陣列

var data1 =[1

,2,3

,4];

var data2 = data1.concat;

data2[2]

=6;console.

log(data1)

;//[1,2,3,4]

console.

log(data2)

;//[1,2,6,4]

寫乙個可以通用的深拷貝方法

var data1 =[,

]function

arraycopy

(obj =

)var agent;

if(obj instanceof

array

)else;}

for(

let key in obj)

return agent

}var data2 =

arraycopy

(data1)

; data2[1]

.name =

"加菲貓"

; console.

log(data2)

;//name加菲貓

console.

log(data1)

;//name大咪咪

淺拷貝與深拷貝的區別。如何實現深拷貝。

關於拷貝應該是大家面試中經常被問到的問題,特此總結一下,為以後積累經驗。鞏固拷貝之前必須先回顧下資料的分類,知道其儲存的位置。基本資料型別 1 分類 string number boolean undefined null symbol 2 特點 資料存在棧記憶體中 引用資料型別 1 分類 obje...

js深拷貝與淺拷貝

1 基礎知識 基本型別與引用型別 js中可以把變數分成兩部分,基本型別和引用型別。基本型別包括 undefined null boolean number和string 引用型別值可能由多個值構成的物件。在對基礎型別資料進行拷貝時,實際相當於建立新的相同資料 hello 賦值給b var a hel...

js 淺拷貝與深拷貝

js 有兩種資料型別,基礎資料型別和引用資料型別 基礎資料型別都是按值訪問的,我們可以直接操作儲存在變數中的實際的值。而引用型別如array,1.淺拷貝 只複製指向某個物件的指標,而不複製物件本身,新舊物件共享一塊記憶體 淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用...