Skip to content

Commit 219b1e4

Browse files
xcatliuyin1999
andauthored
fix: an error in Chinese version of Structured_clone_algorithm (#9598)
* fix: an error in Chinese version of Structured_clone_algorithm Fix an error in Chinese version of Structured_clone_algorithm * minor fixes * add sidebar Co-authored-by: allo <[email protected]>
1 parent 6d4b871 commit 219b1e4

1 file changed

Lines changed: 36 additions & 27 deletions

File tree

  • files/zh-cn/web/api/web_workers_api/structured_clone_algorithm

files/zh-cn/web/api/web_workers_api/structured_clone_algorithm/index.md

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ title: 结构化克隆算法
33
slug: Web/API/Web_Workers_API/Structured_clone_algorithm
44
---
55

6-
结构化克隆算法是[由 HTML5 规范定义](http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#safe-passing-of-structured-data)的用于复制复杂 JavaScript 对象的算法。通过来自 [Workers](/zh-CN/docs/Web/API/Worker)`postMessage()` 或使用 [IndexedDB](/zh-CN/docs/Glossary/IndexedDB) 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。
6+
{{DefaultAPISidebar("Web Workers API")}}
7+
8+
**结构化克隆算法**用于复制复杂 JavaScript 对象的算法。通过来自 [Worker](/zh-CN/docs/Web/API/Worker)`postMessage()` 或使用 [IndexedDB](/zh-CN/docs/Glossary/IndexedDB) 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。
79

810
## 结构化克隆所不能做到的
911

10-
- [`Error`](/zh-CN/JavaScript/Reference/Global_Objects/Error) 以及 [`Function`](/zh-CN/JavaScript/Reference/Global_Objects/Function) 对象是不能被结构化克隆算法复制的;如果你尝试这样子去做,这会导致抛出 `DATA_CLONE_ERR` 的异常。
12+
- [`Function`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function) 对象是不能被结构化克隆算法复制的;如果你尝试这样子去做,这会导致抛出 `DATA_CLONE_ERR` 的异常。
1113
- 企图去克隆 DOM 节点同样会抛出 `DATA_CLONE_ERR` 异常。
1214
- 对象的某些特定参数也不会被保留
1315

@@ -17,29 +19,36 @@ slug: Web/API/Web_Workers_API/Structured_clone_algorithm
1719

1820
## 支持的类型
1921

20-
| 对象类型 | 注意 |
21-
| --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
22-
| [所有的原始类型](/zh-CN/docs/Web/JavaScript/Data_structures#原始值) | symbols 除外 |
23-
| [Boolean](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Boolean) 对象 | |
24-
| String 对象 | |
25-
| [Date](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date) | |
26-
| [RegExp](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp) | `lastIndex` 字段不会被保留。 |
27-
| {{ domxref("Blob") }} | |
28-
| {{ domxref("File") }} | |
29-
| {{ domxref("FileList") }} | |
30-
| [ArrayBuffer](/zh-CN/docs/Web/API/ArrayBuffer) | |
31-
| [ArrayBufferView](/zh-CN/docs/Web/API/ArrayBufferView) | 这基本上意味着所有的 [类型化数组](/zh-CN/docs/Web/JavaScript/Typed_arrays) ,如 Int32Array 等。 |
32-
| {{ domxref("ImageData") }} | |
33-
| [Array](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array) | |
34-
| [Object](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object) | 仅包括普通对象(如对象字面量) |
35-
| [Map](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map) | |
36-
| [Set](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set) | |
37-
38-
## 相关链接
39-
40-
- [HTML5 Specification: Safe passing of structured data](http://www.w3.org/TR/html5/infrastructure.html#safe-passing-of-structured-data)
41-
- {{ domxref("window.history") }}
42-
- {{ domxref("window.postMessage()") }}
43-
- [Web Workers](/zh-CN/docs/Web/API/Web_Workers_API)
22+
### JavaScript 类型
23+
24+
- {{jsxref("Array")}}
25+
- {{jsxref("ArrayBuffer")}}
26+
- {{jsxref("Boolean")}}
27+
- {{jsxref("DataView")}}
28+
- {{jsxref("Date")}}
29+
- {{jsxref("Error")}} 类型(仅限部分 [Error 类型](#error_类型))。
30+
- {{jsxref("Map")}}
31+
- {{jsxref("Object")}} objects: but only plain objects (e.g. from object literals).
32+
-`symbol` 以外的[基本类型](/zh-CN/docs/Web/JavaScript/Data_structures#primitive_values)
33+
- {{jsxref("RegExp")}}:`lastIndex` 字段不会被保留。
34+
- {{jsxref("Set")}}
35+
- {{jsxref("String")}}
36+
- {{jsxref("TypedArray")}}
37+
38+
#### Error 类型
39+
40+
仅支持以下 `Error` 类型:[Error](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Error)[EvalError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/EvalError)[RangeError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RangeError)[ReferenceError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError)[SyntaxError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError)[TypeError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypeError)[URIError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/URIError)(或其它会被设置为 `Error` 的)。
41+
42+
浏览器必须序列化 `name``message` 字段,其它有意义的字段则可能会序列化,如 `stack``cause` 等。
43+
44+
[AggregateError](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/AggregateError) 预计会在 [whatwg/html#5749](https://github.com/whatwg/html/pull/5749) 被添加到标准中(并且已被部分浏览器所支持)。
45+
46+
## 参见
47+
48+
- [HTML 规范:安全地传递结构化数据](https://html.spec.whatwg.org/multipage/infrastructure.html#safe-passing-of-structured-data)
49+
- {{Glossary("Transferable objects", "可转移对象")}}
50+
- {{domxref("structuredClone()")}}
51+
- {{domxref("window.history")}}
52+
- {{domxref("window.postMessage()")}}
53+
- [Web Worker](/zh-CN/docs/Web/API/Web_Workers_API)
4454
- [IndexedDB](/zh-CN/docs/Web/API/IndexedDB_API)
45-
- [Components.utils.cloneInto](/zh-CN/docs/Components.utils.cloneInto)

0 commit comments

Comments
 (0)