Skip to content

cloneDeep() function

创建 value 的深拷贝。

支持的类型:原始值、Array、纯对象(包括 Object.create(null))、Date、RegExp(保留 lastIndex)、Map、Set、ArrayBuffer、TypedArray、DataView。类实例在保留原型的同时复制自身可枚举属性(字符串和 symbol 键)。支持循环引用。

structuredClone 不同,函数不会抛出异常而是保持引用,类实例的原型也会被保留。WeakMap/WeakSet/Promise 无法克隆,将原样返回。

Signature:

typescript
function cloneDeep<T>(value: T): T;

Example

ts
const obj = { a: 1, b: { c: 2 }, d: [1, 2, 3] };
const cloned = cloneDeep(obj);
cloned.b === obj.b; // false
cloned.d === obj.d; // false

// 循环引用
const circular = { a: 1, self: null as unknown };
circular.self = circular;
const clonedCircular = cloneDeep(circular);
clonedCircular.self === clonedCircular; // true

// 类实例保留其原型
class Point {
  constructor(public x: number) {}
}
cloneDeep(new Point(1)) instanceof Point; // true

Open Source Code

Released under the Apache-2.0 License.