结构化克隆算法
结构化克隆算法复制复杂的 JavaScript 对象。它在内部用于调用structuredClone()
,通过postMessage()
在Worker之间传输数据,使用IndexedDB存储对象,或为其他 API复制对象。
它通过递归遍历输入对象并维护先前访问过的引用的映射来克隆,以避免无限遍历循环。
结构化克隆无法处理的事项
支持的类型
JavaScript 类型
数组
ArrayBuffer
布尔值
DataView
日期
Error
类型(但请参见下面的错误类型)。映射
数字
Object
对象:但仅限于普通对象(例如,来自对象字面量)。- 原始类型,除了
symbol
。 RegExp
:但请注意,lastIndex
不会被保留。集合
字符串
TypedArray
错误类型
对于 Error
类型,错误名称必须是以下之一:Error
、EvalError
、RangeError
、ReferenceError
、SyntaxError
、TypeError
、URIError
(否则将设置为“Error”)。
浏览器必须序列化 name
和 message
属性,并且预计会序列化错误的其他“有趣”属性,例如 stack
、cause
等。
AggregateError
支持预计将在whatwg/html#5749中添加到规范中(并且一些浏览器已经支持)。
Web/API 类型
AudioData
Blob
CropTarget
CryptoKey
DOMException
:浏览器必须序列化name
和message
属性。其他属性也可能被序列化/克隆。DOMMatrix
DOMMatrixReadOnly
DOMPoint
DOMPointReadOnly
DOMQuad
DOMRect
DOMRectReadOnly
文件
FileList
FileSystemDirectoryHandle
FileSystemFileHandle
FileSystemHandle
GPUCompilationInfo
GPUCompilationMessage
ImageBitmap
ImageData
RTCCertificate
VideoFrame