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

Các kỹ thuật copy object trong JavaScript

2 loại copy: Shallow (nghĩa) và Deep (sâu).

Shallow Copy

Copy cấp 1 (top-level). Object lồng nhau **chia sẻ reference**.

let inner = { a: 'b', c: 'd' };
let obj = { x: "test", y: inner };
let copy = Object.assign({}, obj); // hoặc {...obj}

inner.a = "test";
console.log(obj);  // { x: 'test', y: { a: 'test', c: 'd' } }
console.log(copy); // { x: 'test', y: { a: 'test', c: 'd' } } — MUTATED!

Deep Copy

Clone đệ quy mọi cấp độ — hoàn toàn độc lập.

Cách 1: JSON round-trip (đơn giản, nhưng hạn chế)

let copy = JSON.parse(JSON.stringify(obj));
// Mất: function, Date, RegExp, Map, Set, Symbol, undefined, circular ref

Cách 2: structuredClone() (Native, modern — khuyên dùng)

let copy = structuredClone(obj);
// Hỗ trợ: Date, RegExp, Map, Set, ArrayBuffer, circular reference!

Cách 3: Lodash _.cloneDeep()

const _ = require('lodash');
let copy = _.cloneDeep(obj);

So sánh

MethodDeep?FunctionDate/RegExpCircularSupport
Object.assign / {...}No✓✓✗All
JSON.parse/stringifyYes✗✗ (string)✗All
structuredClone()Yes✗✓✓Modern
lodash.cloneDeepYes✓✓✓All (lib)