Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách deep clone object hiệu quả nhất trong JavaScript

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);