structuredClone în JavaScript

Obiecte Browserele din 2022, Node.js 17+

Creează o copie completă (în adâncime) a unei valori: obiecte, tablouri, Date, Map, Set.

Sintaxă
structuredClone(valoare, optiuni)

Ce face structuredClone

structuredClone copiază valoarea cu tot ce conține, la orice nivel. Spre deosebire de JSON.parse(JSON.stringify(x)), păstrează tipurile Date, Map, Set, RegExp, typed arrays și referințele circulare.

Nu poate copia funcții, elemente DOM sau clase cu metode: funcțiile aruncă DataCloneError, iar instanțele claselor devin obiecte simple, fără prototip. Opțiunea { transfer: [buffer] } mută un ArrayBuffer în loc să-l copieze.

Parametri

Parametru Descriere
valoare Valoarea copiată.
optiuni Opțional. { transfer: [...] }: obiecte transferate, nu copiate.

Ce returnează

O copie independentă.

Exemple

Exemplul 1: Copie în adâncime cu tipuri păstrate

const comanda = {
  client: { nume: "Ana", adresa: { oras: "Iași" } },
  data: new Date(Date.UTC(2026, 9, 19)),
  etichete: new Set(["urgent"]),
};

const copie = structuredClone(comanda);
copie.client.adresa.oras = "Cluj";

console.log(comanda.client.adresa.oras);
console.log(copie.data instanceof Date, copie.etichete.has("urgent"));

Rezultat

Iași
true true

Exemplul 2: Față de JSON și limitele lui structuredClone

const date = { cand: new Date(0), dict: new Map([["a", 1]]) };

console.log(JSON.parse(JSON.stringify(date)));
console.log(structuredClone(date));
try {
  structuredClone({ calculeaza() {} });
} catch (e) {
  console.log(e.name);
}

Rezultat

{ cand: '1970-01-01T00:00:00.000Z', dict: {} }
{ cand: 1970-01-01T00:00:00.000Z, dict: Map(1) { 'a' => 1 } }
DataCloneError

Greșeli frecvente

  • Copiezi o instanță de clasă și apoi apelezi o metodă pe copie. Copia este un obiect simplu; metoda nu mai există.

Comenzi înrudite

  • Object.assign: Copiază proprietățile din unul sau mai multe obiecte sursă într-un obiect țintă.
  • ... (spread): Desface un tablou sau un obiect în elementele lui. Folosit pentru copii și combinări.
  • JSON.parse: Transformă un text JSON într-un obiect sau tablou JavaScript.