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
| Parameter | Type | Description |
|---|---|---|
value | T | 要拷贝的值 |
Returns
T
深拷贝后的值
Example
class A `{ x = 1; }`
cloneDeep(new A()) instanceof A; // true