[筆記][TypeScript] (Javascript) 如何複製 ( Clone ) 出一份 新的物件 (By Value, 非By Reference)

  • 3674
  • 0
  • 2017-10-12

在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));

 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat