複製 JavaScript 物件是各種程式設計場景中的關鍵任務。然而,由於 JavaScript 物件系統的複雜性,建立不受原始變更影響的物件副本可能具有挑戰性。
JavaScript 的本機物件指派運算子(例如,x = y)僅建立對原始物件的參考。對 x 或 y 所做的變更將影響這兩個物件。此外,複製從內建 JavaScript 物件(例如陣列、日期)派生的物件可能會引入不需要的屬性。
要建立JavaScript 物件的深層副本,請考慮以下綜合解決方案:
function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); } return copy; }
此函數採用遞歸方法遍歷物件的屬性並建立一個新物件每個屬性值都有單獨的實例。它處理 null、未定義和各種內建物件類型的情況,同時排除不可枚舉和隱藏屬性。
雖然解決方案涵蓋了大多數場景,但它假設物件資料形成樹結構,這意味著物件內不存在循環引用。此外,它需要了解物件的建構子才能正確實例化複製的物件。
在現代瀏覽器中,結構化複製標準提供了一種更強大、更有效率的方法創建物件的深層副本。 StructuredClone() 函數複製整個對象,保留隱藏屬性和循環參考。
const clone = structuredClone(object);
請記住,克隆物件可能是一項複雜的任務,並根據具體要求考慮每種方法的局限性您的申請。
以上是如何建立 JavaScript 物件的真正深拷貝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!