Skip to content

Latest commit

 

History

History
54 lines (40 loc) · 3.15 KB

File metadata and controls

54 lines (40 loc) · 3.15 KB
title slug
结构化克隆算法
Web/API/Web_Workers_API/Structured_clone_algorithm

{{DefaultAPISidebar("Web Workers API")}}

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

结构化克隆所不能做到的

  • Function 对象是不能被结构化克隆算法复制的;如果你尝试这样子去做,这会导致抛出 DATA_CLONE_ERR 的异常。

  • 企图去克隆 DOM 节点同样会抛出 DATA_CLONE_ERR 异常。

  • 对象的某些特定参数也不会被保留

    • RegExp 对象的 lastIndex 字段不会被保留
    • 属性描述符,setters 以及 getters(以及其他类似元数据的功能)同样不会被复制。例如,如果一个对象用属性描述符标记为 read-only,它将会被复制为 read-write,因为这是默认的情况下。
    • 原形链上的属性也不会被追踪以及复制。

支持的类型

JavaScript 类型

  • {{jsxref("Array")}}
  • {{jsxref("ArrayBuffer")}}
  • {{jsxref("Boolean")}}
  • {{jsxref("DataView")}}
  • {{jsxref("Date")}}
  • {{jsxref("Error")}} 类型(仅限部分 Error 类型)。
  • {{jsxref("Map")}}
  • {{jsxref("Object")}} objects: but only plain objects (e.g. from object literals).
  • symbol 以外的基本类型
  • {{jsxref("RegExp")}}:lastIndex 字段不会被保留。
  • {{jsxref("Set")}}
  • {{jsxref("String")}}
  • {{jsxref("TypedArray")}}

Error 类型

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

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

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

参见