JavaScript - 结构化克隆算法概要整理
结构化克隆算法(Structured Cloning Algorithm)是用于复制复杂 JavaScript 对象的算法,广泛应用于postMessage()、IndexedDB、Worker数据传递等场景。它支持的对象类型如下,同时也有明确的不支持类型:
一、支持的对象类型
基本数据类型
-
字符串(String)
-
数字(Number,包括 NaN、Infinity)
-
布尔值(Boolean)
-
null、undefined
-
结构化对象
-
对象字面量(Object)
-
数组(Array)
-
日期(Date):会被复制为新的 Date 实例,值与原对象相同
二进制数据类型
-
ArrayBuffer
-
TypedArray(如 Uint8Array、Float64Array 等)
-
DataView
-
正则表达式(RegExp):复制时会保留 pattern 和 flags,但 lastIndex 属性不会被复制
-
Map:键值对会被递归复制
-
Set:元素会被递归复制
-
错误对象(Error 及其子类,如 TypeError、RangeError 等):部分环境支持,复制时会保留错误消息和堆栈信息
可克隆的对象类型
-
由Object.create()创建的对象
-
符合结构化克隆要求的自定义对象(需通过特定方式实现,较罕见)
二、不支持的对象类型
-
函数(Function):无法克隆,会抛出错误
-
Symbol:作为属性键或值时均不支持
-
DOM 节点:如document、Element等 DOM 对象
-
WeakMap/WeakSet:由于其弱引用特性,无法被结构化克隆
-
循环引用对象:虽然部分实现(如现代浏览器)已支持有限的循环引用,但标准中不保证支持
-
某些特殊对象:如Proxy、Promise、Generator等
核心特点
-
递归复制:会深度克隆对象的所有嵌套属性(前提是嵌套类型也被支持)。
-
与 JSON 序列化的区别:比JSON.stringify()支持更多类型(如 Date、Map、二进制数据等),但仍有局限性(如不支持函数)。
更多推荐



所有评论(0)