结构化克隆算法

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

结构化克隆所不能做到的

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

支持的类型

对象类型 注意
所有的原始类型 symbols 除外
Boolean 对象
String 对象
Date
RegExp lastIndex 字段不会被保留。
Blob
File
FileList
ArrayBuffer
ArrayBufferView 这基本上意味着所有的 类型化数组 ,如 Int32Array 等。
ImageData
Array
Object 仅包括普通对象(如对象字面量)
Map
Set

相关链接