首先我們需要弄清楚什麼是淺拷貝,其實我個人覺得淺拷貝從性質上和事件冒泡一樣,當出現這種事件時就代表出問題了
首先要看看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.淺拷貝 只複製指向某個物件的指標,而不複製物件本身,新舊物件共享一塊記憶體 淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用...