Object.assign în JavaScript

Obiecte ES2015 (ES6)

Copiază proprietățile din unul sau mai multe obiecte sursă într-un obiect țintă.

Sintaxă
Object.assign(tinta, sursa1, sursa2, ...)

Ce face Object.assign

Object.assign copiază toate proprietățile proprii și enumerabile ale surselor în obiectul țintă, în ordine: dacă o cheie apare de mai multe ori, câștigă ultima. Obiectul țintă este modificat și returnat.

Copia este superficială: dacă o proprietate conține un obiect sau un tablou, se copiază doar referința. Pentru obiecte simple, { ...a, ...b } face același lucru și creează mereu un obiect nou.

Parametri

Parametru Descriere
tinta Obiectul în care se copiază (este modificat).
sursa1, sursa2, ... Obiectele din care se copiază.

Ce returnează

Obiectul țintă.

Exemple

Exemplul 1: Setări implicite suprascrise

const implicite = { tema: "deschisă", limba: "ro", notificari: true };
const alese = { tema: "întunecată" };

const setari = Object.assign({}, implicite, alese);
console.log(setari);
console.log(implicite);

Rezultat

{ tema: 'întunecată', limba: 'ro', notificari: true }
{ tema: 'deschisă', limba: 'ro', notificari: true }

Exemplul 2: Copia este superficială

const original = { nume: "Ana", adresa: { oras: "Iași" } };
const copie = Object.assign({}, original);

copie.nume = "Maria";
copie.adresa.oras = "Cluj";
console.log(original);

Rezultat

{ nume: 'Ana', adresa: { oras: 'Cluj' } }

Greșeli frecvente

  • Scrii Object.assign(implicite, alese) și strici obiectul cu valori implicite, care devine țintă. Pune un obiect gol primul: Object.assign({}, implicite, alese).
  • Te bazezi pe Object.assign pentru o copie completă. Obiectele interioare rămân comune; folosește structuredClone.

Comenzi înrudite

  • ... (spread): Desface un tablou sau un obiect în elementele lui. Folosit pentru copii și combinări.
  • structuredClone: Creează o copie completă (în adâncime) a unei valori: obiecte, tablouri, Date, Map, Set.
  • Object.create: Creează un obiect nou care are ca prototip obiectul dat (moștenește proprietățile lui).