結構化克隆演算法
結構化克隆演算法用於複製複雜的 JavaScript 物件。它在呼叫 structuredClone() 時在內部使用,用於透過 postMessage() 在 Worker 之間傳輸資料,使用 IndexedDB 儲存物件,或為 其他 API 複製物件。
它透過遞迴遍歷輸入物件來克隆,同時維護一個先前訪問過的引用的對映,以避免無限遍歷迴圈。
結構化克隆不支援的功能
支援的型別
JavaScript 型別
ArrayArrayBufferBooleanDataViewDateError型別(但請參閱下面的 錯誤型別)。MapNumberObject物件:但僅限於普通物件(例如,來自物件字面量)。- 原始型別,除了
symbol。 RegExp:但請注意lastIndex不被保留。SetStringTypedArray
錯誤型別
對於 Error 型別,錯誤名稱必須是以下之一:Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError(否則將設定為 "Error")。
瀏覽器必須序列化 name 和 message 屬性,並期望序列化錯誤的其他“有趣”屬性,如 stack、cause 等。
AggregateError 的支援預計將在 whatwg/html#5749 中新增到規範中(並且在某些瀏覽器中已得到支援)。
Web/API 型別
AudioDataBlobCropTargetCryptoKeyDOMException:瀏覽器必須序列化name和message屬性。其他屬性也可能被序列化/克隆。DOMMatrixDOMMatrixReadOnlyDOMPointDOMPointReadOnlyDOMQuadDOMRectDOMRectReadOnlyEncodedAudioChunkEncodedVideoChunkFencedFrameConfigFileFileListFileSystemDirectoryHandleFileSystemFileHandleFileSystemHandleGPUCompilationInfoGPUCompilationMessageGPUPipelineErrorImageBitmapImageDataRTCCertificateRTCEncodedAudioFrameRTCEncodedVideoFrameVideoFrameWebTransportError
注意: 可序列化的物件在 Web IDL 檔案中用 [Serializable] 屬性進行標記。