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