跳到主要内容

cloneDeep()

function cloneDeep<T>(value): T;

Defined in: packages/utils/src/object/cloneDeep.ts:141

深拷贝值。

只有一套对象模型:始终保留原型链与 property descriptor,因此 instanceof 在拷贝前后恒等。历史实现是 try structuredClone / catch 内部实现,同一个类只要多 一个函数属性就会在「丢原型」和「保原型」之间翻转(UTL-021),已移除。

分类处理:

  • 原始值、函数:按引用原样返回(函数不被拷贝)。
  • Date / RegExp / ArrayBuffer / DataView / TypedArray:重建同类型实例。 DataView 会重建切片缓冲区,因此 byteOffset 归零、字节内容不变。
  • Map / Set / Array:递归拷贝键、值与元素。
  • 装箱原语(new String 等)与 Blob / File:状态在内部槽里,委托 structuredClone。
  • 其余对象:Object.create(原型) + 逐个 Reflect.ownKeys 复制 descriptor, symbol 键、getter/setter、不可枚举属性都保留;属性值中的函数按引用保留。

循环引用与共享引用通过 WeakMap 收敛,拷贝结果中的共享结构仍然共享。

已知边界:ImageData / ImageBitmap / MessagePort 等其余宿主对象不在 显式分类里,会走通用对象分支,只复制自有属性,语义不保证。

Type Parameters​

Type Parameter
T

Parameters​

ParameterTypeDescription
valueT要拷贝的值

Returns​

T

深拷贝后的值

Example​

class A `{ x = 1; }`
cloneDeep(new A()) instanceof A; // true