Deep clone: sao chép đệ quy mọi object con — bản copy và gốc hoàn toàn độc lập.
Cách đơn giản nhất: JSON round-trip
let obj = { foo: 1, bar: { baz: 'test' } };
let newObj = JSON.parse(JSON.stringify(obj));
obj.bar.baz = 20;
console.log(obj); // { foo: 1, bar: { baz: 20 } }
console.log(newObj); // { foo: 1, bar: { baz: 'test' } } — không đổi
Hạn chế của JSON method
- Mất function/method (function không serialize được).
- Mất
undefined,Symbol,Date(b thành string),RegExp,Map,Set... - Circular reference → lỗi.
- Performance kém với object lớn.
Thay thế production-ready
lodash.cloneDeep()structuredClone()(modern browsers, Node 17+) — hỗ trợ circular, Date, RegExp, Map, Set, ArrayBuffer...
// Modern native way const cloned = structuredClone(original);