首頁 > web前端 > js教程 > 如何建立 JavaScript 物件的真正深拷貝?

如何建立 JavaScript 物件的真正深拷貝?

Patricia Arquette
發布: 2024-12-26 02:03:10
原創
785 人瀏覽過

How to Create a True Deep Copy of a JavaScript Object?

如何正確複製 JavaScript 物件

複製 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、未定義和各種內建物件類型的情況,同時排除不可枚舉和隱藏屬性。

邊緣情況和假設

雖然解決方案涵蓋了大多數場景,但它假設物件資料形成樹結構,這意味著物件內不存在循環引用。此外,它需要了解物件的建構子才能正確實例化複製的物件。

結構化複製(ES2022 更新)

在現代瀏覽器中,結構化複製標準提供了一種更強大、更有效率的方法創建物件的深層副本。 StructuredClone() 函數複製整個對象,保留隱藏屬性和循環參考。

const clone = structuredClone(object);
登入後複製

請記住,克隆物件可能是一項複雜的任務,並根據具體要求考慮每種方法的局限性您的申請。

以上是如何建立 JavaScript 物件的真正深拷貝?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板