深拷貝與淺拷貝確實很常使用,這邊稍微紀錄一下,其中深拷貝的效果不是使用常見的
JSON.parse(JSON.stringify(object)) 來實作,這部分未來再深入探討...
現在淺拷貝大都使用「解構 」的方式
即使是陣列也是一樣
另外,陣列也可以使用 slice() 方法
再來聊聊深拷貝的部分,為何會有深淺之分呢?那是因為淺拷貝預設只會複製第一層的
屬性值給要指定的變數上,若其中複製的來源身上有某個屬性是物件或是陣列,淺拷貝
僅會將「reference (參考)」指到新的變數上,而沒有逐一將值複製出來
由上一個物件的淺拷貝來觀察
確實 person 與 person2 的內容值,看似一樣,但是若再仔細比較 family 屬性,兩者的
reference 其實是一樣的,顯示為 true
若此時調整 person.family 的內容,是否 person2 family 內容也會跟著調整?
由以下結果可以看出,person2 的 age 屬性沒有變動,person2 的 family.dad 變動了
有了以上的結論,我們希望完全的複製屬性值,內容不是參考同一個記憶體位置
可以使用 structuredClone 方法
以下舉例,透過深拷貝並且指定給 person3 變數,,並且觀察 person3 的內容
其中,物件的深拷貝有時我們會使用 JSON.parse(JSON.stringify(object)),差別只在於
若物件內容有 get 或 set 時,就會被轉為 {} ,不甚理想,這部分未來再深入探討
同樣的方式陣列也支援,只是陣列很少要深拷貝的情境
參考
沒有留言:
張貼留言