title | slug |
---|---|
结构化克隆算法 |
Web/API/Web_Workers_API/Structured_clone_algorithm |
{{DefaultAPISidebar("Web Workers API")}}
结构化克隆算法用于复制复杂 JavaScript 对象的算法。通过来自 Worker 的 postMessage()
或使用 IndexedDB 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。
-
Function
对象是不能被结构化克隆算法复制的;如果你尝试这样子去做,这会导致抛出DATA_CLONE_ERR
的异常。 -
企图去克隆 DOM 节点同样会抛出
DATA_CLONE_ERR
异常。 -
对象的某些特定参数也不会被保留
RegExp
对象的lastIndex
字段不会被保留- 属性描述符,setters 以及 getters(以及其他类似元数据的功能)同样不会被复制。例如,如果一个对象用属性描述符标记为 read-only,它将会被复制为 read-write,因为这是默认的情况下。
- 原形链上的属性也不会被追踪以及复制。
- {{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、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError(或其它会被设置为 Error
的)。
浏览器必须序列化 name
和 message
字段,其它有意义的字段则可能会序列化,如 stack
、cause
等。
AggregateError 预计会在 whatwg/html#5749 被添加到标准中(并且已被部分浏览器所支持)。
- HTML 规范:安全地传递结构化数据
- {{Glossary("Transferable objects", "可转移对象")}}
- {{domxref("structuredClone()")}}
- {{domxref("window.history")}}
- {{domxref("window.postMessage()")}}
- Web Worker
- IndexedDB