You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

structuredClone不支持哪些对象?非普通对象具体指什么?

structuredClone 不支持的对象类型详解

首先澄清你提到的类实例问题:MDN说的「普通对象」特指无自定义原型链的对象字面量,但structuredClone并非完全不能处理类实例——它能克隆类实例,但会丢弃类的原型、方法,只保留实例的可枚举自有属性,相当于把实例“降级”成了普通对象。

下面是structuredClone明确不支持的对象/类型,碰到这些会直接抛出DataCloneError,或者丢失数据:

  • 函数/方法:不管是对象里的方法、类的原型方法,还是独立函数,都无法被克隆。比如:

    const obj = { greet: () => 'hello' };
    structuredClone(obj); // 抛出 DataCloneError
    
  • Symbol作为键的属性:如果对象用Symbol做属性名,克隆后的对象会直接丢失这些属性,结构化克隆不处理Symbol键。

  • DOM节点:像document.querySelector('div')这类浏览器DOM元素,属于宿主对象,不在结构化克隆的支持范围内,克隆会报错。

  • 部分内置对象实例:

    • Error及其子类(比如TypeError、RangeError):克隆这类实例会直接报错
    • RegExp:虽然不会报错,但克隆后的正则会丢失lastIndex属性
    • WeakMap、WeakSet:因为它们依赖弱引用机制,完全不支持克隆
    • 如果Map/Set里存了函数、DOM节点这类不支持的元素,整个克隆操作都会失败
  • 不可枚举的自有属性:结构化克隆只会复制对象的可枚举自有属性,类实例里的不可枚举属性(比如通过Object.defineProperty定义的不可枚举属性)会被忽略。

另外补充下和JSON.parse(JSON.stringify())的差异:后者不仅不支持循环引用,还会把undefined、NaN、Infinity转成null,而structuredClone支持这些值,但上述不支持的类型是它的硬伤。

内容的提问来源于stack exchange,提问作者user12273078

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:35:23