JS深淺拷貝複習
阿新 • • 發佈:2021-10-27
概念:淺拷貝是拷貝堆記憶體的地址,而深拷貝是拷貝堆記憶體中的值
JS只提供了一個賦值運算子去拷貝它的地址,JS沒有提供給我們去拷貝堆記憶體中值的方法,我們平時用的Object.assign
和展開運算子看似可以實現物件的拷貝,而它們對於物件屬性的拷貝也是淺拷貝;
一、實現深拷貝的多種方法:
1.JSON字串轉化
JSON.parse(JSON.stringify(object))
2.遞迴拷貝(用for in 對入參obj的keys進行遍歷,並一個一個的copy到newobj上)
for(let i in obj){ newobj[i]=copy(obj[i]); }
二、淺拷貝方法
1.for···in只迴圈第一層
for (let i in obj1) { obj2[i] = obj1[i]; }
2.Object.assign方法
var obj1 = Object.assign(obj);
3.直接用=賦值
obj1 = obj2
在實際應用中,比如在點選事件btnClick(item),想要將這個item賦值給v-modle繫結的資料時,就不能使用淺拷貝,否則兩者指向同一地址,item值會被改變(說的很粗略,踩過的坑自己記錄一下)