结构化克隆算法
结构化克隆算法用于复制复杂的 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] 属性进行标记。