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.