在Javascript中,當變數放的內容是純值(非物件,a=1;),b=a的時候,是使用ByVal的方式,也就是複製一份資料給b,但這情況在「物件」的狀況,卻是 By Reference的傳址方式,也就是兩個變數,指向同一個記憶區塊,資料是相同那塊空間的。因此,如果b[0].Name="aaa",這時候去取a[0].Name一樣會變成"aaa"。那麼,如何在物件的時候,如何真正的複製出一份內容,存在不同的記憶區塊,讓彼此不會影響呢?看下去~
緣起:
在Javascript中,當變數放的內容是純值(非物件,a=1;),b=a的時候,是使用ByVal的方式,也就是複製一份資料給b,但這情況在「物件」的狀況,卻是 By Reference的傳址方式,也就是兩個變數,指向同一個記憶區塊,資料是相同那塊空間的。因此,如果b[0].Name="aaa",這時候去取a[0].Name一樣會變成"aaa"。那麼,如何在物件的時候,如何真正的複製出一份內容,存在不同的記憶區塊,讓彼此不會影響呢?
方法:
做法是,透過 JSON 將物件序劣化、再物件化。
let NewObject:any=[];
NewObject = JSON.parse(JSON.stringify(OriginObj));
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |