结构化克隆算法

结构化克隆算法复制复杂的 JavaScript 对象。它在内部用于调用structuredClone(),通过postMessage()Worker之间传输数据,使用IndexedDB存储对象,或为其他 API复制对象。

它通过递归遍历输入对象并维护先前访问过的引用的映射来克隆,以避免无限遍历循环。

结构化克隆无法处理的事项

  • Function 对象无法通过结构化克隆算法复制;尝试复制会抛出 DataCloneError 异常。
  • 克隆 DOM 节点也会抛出 DataCloneError 异常。
  • 某些对象属性不会被保留
    • RegExp 对象的 lastIndex 属性不会被保留。
    • 属性描述符、设置器、获取器以及类似的元数据功能不会被复制。例如,如果一个对象使用属性描述符标记为只读,则在副本中它将是读/写,因为这是默认行为。
    • 原型链不会被遍历或复制。
    • 类私有属性不会被复制。(尽管内置类型的私有属性可能会被复制。)

支持的类型

JavaScript 类型

错误类型

对于 Error 类型,错误名称必须是以下之一:ErrorEvalErrorRangeErrorReferenceErrorSyntaxErrorTypeErrorURIError(否则将设置为“Error”)。

浏览器必须序列化 namemessage 属性,并且预计会序列化错误的其他“有趣”属性,例如 stackcause 等。

AggregateError 支持预计将在whatwg/html#5749中添加到规范中(并且一些浏览器已经支持)。

Web/API 类型

另请参阅