结构化克隆算法
更新时间: 2021-06-07 15:48:21
结构化克隆算法是HTML5规范定义的用于复制复杂JavaScript对象的算法。
当通过postMessage()与Workers之间进行数据传输或使用IndexedDB存储对象时,在内部使用它。
它通过递归遍历输入对象而建立一个副本,同时保持先前访问的引用的映射,以避免无限遍历循环。
# 不适用的场景
Error
和Function
对象不能通过结构化克隆算法复制;尝试这样做将引发DATA_CLONE_ERR
异常。- 克隆
DOM
节点会引发DATA_CLONE_ERR
异常。 - 对象的以下参数不会保留:
RegExp
对象的lastIndex
字段不会保留。- 属性描述符,
setter
和getter
(以及类似元数据的功能)不会被复制。例如,如果使用属性描述符将对象标记为只读,则复制后的对象中是可读写(默认配置)。 - 原型链不会复制。
# 支持的类型
- 除了symbol以外的基本类型
- Boolean object
- String object
- Date
- RegExp lastIndex字段不会保留
- Blob
- File
- FileList
- ArrayBuffer
- ArrayBufferView 所有的arrayBuffer视图,例如Int32Array.
- ImageBitmap
- ImageData
- Array
- Object 普通js Object
- Map
- Set