结构化克隆算法

结构化克隆算法用于复制复杂 JavaScript 对象的算法。通过来自 WorkerpostMessage() 或使用 IndexedDB 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。

结构化克隆所不能做到的

  • Function 对象是不能被结构化克隆算法复制的;如果你尝试这样子去做,这会导致抛出 DATA_CLONE_ERR 的异常。
  • 企图去克隆 DOM 节点同样会抛出 DATA_CLONE_ERR 异常。
  • 对象的某些特定参数也不会被保留
    • RegExp 对象的 lastIndex 字段不会被保留
    • 属性描述符,setters 以及 getters(以及其他类似元数据的功能)同样不会被复制。例如,如果一个对象用属性描述符标记为 read-only,它将会被复制为 read-write,因为这是默认的情况下。
    • 原形链上的属性也不会被追踪以及复制。

支持的类型

JavaScript 类型

Error 类型

仅支持以下 Error 类型:ErrorEvalErrorRangeErrorReferenceErrorSyntaxErrorTypeErrorURIError(或其它会被设置为 Error 的)。

浏览器必须序列化 namemessage 字段,其它有意义的字段则可能会序列化,如 stackcause 等。

AggregateError 预计会在 whatwg/html#5749 被添加到标准中(并且已被部分浏览器所支持)。

参见