結構化克隆演算法

結構化克隆演算法用於複製複雜的 JavaScript 物件。它在呼叫 structuredClone() 時在內部使用,用於透過 postMessage()Worker 之間傳輸資料,使用 IndexedDB 儲存物件,或為 其他 API 複製物件。

它透過遞迴遍歷輸入物件來克隆,同時維護一個先前訪問過的引用的對映,以避免無限遍歷迴圈。

結構化克隆不支援的功能

  • Function 物件無法被結構化克隆演算法複製;嘗試這樣做會丟擲 DataCloneError 異常。
  • 克隆 DOM 節點同樣會丟擲 DataCloneError 異常。
  • 某些物件屬性不被保留
    • RegExp 物件的 lastIndex 屬性不被保留。
    • 屬性描述符、setter、getter 以及類似的元資料功能不會被複制。例如,如果一個物件使用 屬性描述符標記為只讀,那麼在複製的物件中它將是讀/寫的,因為這是預設行為。
    • 原型鏈不會被遍歷或複製。
    • 類私有元素不會被複制。(儘管內建型別的內部欄位可能會。)

支援的型別

JavaScript 型別

錯誤型別

對於 Error 型別,錯誤名稱必須是以下之一:ErrorEvalErrorRangeErrorReferenceErrorSyntaxErrorTypeErrorURIError(否則將設定為 "Error")。

瀏覽器必須序列化 namemessage 屬性,並期望序列化錯誤的其他“有趣”屬性,如 stackcause 等。

AggregateError 的支援預計將在 whatwg/html#5749 中新增到規範中(並且在某些瀏覽器中已得到支援)。

Web/API 型別

注意: 可序列化的物件在 Web IDL 檔案中用 [Serializable] 屬性進行標記。

另見