JavaScript pratico: destrutturazione e operatore spread

by Anastasia P.
SHARE
JavaScript pratico: destrutturazione e operatore spread
© Guida-HTML5.it

Introduzione

Quando si lavora con JavaScript, gran parte dei dati viene organizzata in oggetti e array. Per leggere e combinare queste strutture in modo chiaro esistono due strumenti molto utili: la destrutturazione e l’operatore spread. Entrambi fanno parte della sintassi moderna di JavaScript e permettono di scrivere codice più breve, leggibile e semplice da mantenere.

La destrutturazione consente di estrarre valori da un oggetto o da un array e assegnarli direttamente a variabili. L’operatore spread, indicato con tre punti (...), permette invece di espandere gli elementi di un array o le proprietà di un oggetto all’interno di una nuova struttura.

Queste tecniche sono particolarmente utili quando si elaborano dati provenienti da un modulo, da un servizio web o da un componente dell’applicazione. Nell’esempio seguente costruiremo un piccolo riepilogo di un profilo utente, combinando dati personali, preferenze e attività recenti.

Codice completo

const profiloBase = {
  nome: "Giulia",
  email: "[email protected]",
  ruolo: "sviluppatrice"
};

const preferenze = {
  tema: "scuro",
  lingua: "it"
};

const attivitaRecenti = [
  "Ha completato il corso JavaScript",
  "Ha pubblicato un progetto",
  "Ha aggiornato il profilo"
];

// Destrutturazione di un oggetto
const { nome, ruolo } = profiloBase;

// Destrutturazione con alias:
// la proprietà email viene assegnata alla variabile indirizzo
const { email: indirizzo } = profiloBase;

// Valore predefinito nel caso in cui la proprietà non esista
const { telefono = "Non disponibile" } = profiloBase;

// Destrutturazione di un array
const [primaAttivita, secondaAttivita, ...altreAttivita] =
  attivitaRecenti;

// Creazione di un nuovo oggetto con l´operatore spread
const profiloCompleto = {
  ...profiloBase,
  ...preferenze,
  verificato: true
};

// Aggiornamento immutabile di una proprietà
const profiloAggiornato = {
  ...profiloCompleto,
  ruolo: "sviluppatrice senior"
};

// Creazione di un nuovo array senza modificare quello originale
const nuoveAttivita = [
  "Ha partecipato a un workshop",
  ...attivitaRecenti
];

console.log(`${nome} è una ${ruolo}.`);
console.log(`Email: ${indirizzo}`);
console.log(`Telefono: ${telefono}`);
console.log(`Prima attività: ${primaAttivita}`);
console.log(`Altre attività:`, altreAttivita);
console.log("Profilo completo:", profiloCompleto);
console.log("Profilo aggiornato:", profiloAggiornato);
console.log("Nuove attività:", nuoveAttivita);

Spiegazione

Destrutturare un oggetto

La sintassi seguente estrae le proprietà nome e ruolo dall’oggetto:

const { nome, ruolo } = profiloBase;

Il nome delle variabili deve corrispondere, per impostazione predefinita, al nome delle proprietà. È possibile però utilizzare un alias:

const { email: indirizzo } = profiloBase;

In questo caso la proprietà si chiama email, mentre la variabile locale si chiama indirizzo. È anche possibile indicare un valore predefinito:

const { telefono = "Non disponibile" } = profiloBase;

Se l’oggetto non contiene la proprietà telefono, la variabile riceverà il testo specificato. Il valore predefinito viene utilizzato soltanto quando la proprietà è undefined.

Destrutturare un array

Con gli array, i valori vengono estratti in base alla loro posizione:

const [prima, seconda] = ["A", "B", "C"];

La variabile prima conterrà "A", mentre seconda conterrà "B". L’operatore rest, che usa anch’esso i tre punti, raccoglie tutti i valori rimanenti:

const [primo, ...rimanenti] = [10, 20, 30, 40];

In questo esempio, primo vale 10 e rimanenti contiene l’array [20, 30, 40]. È importante distinguere il contesto: nella destrutturazione i tre punti raccolgono i valori restanti, mentre nella creazione di un nuovo array o oggetto li espandono.

Usare lo spread con gli oggetti

Lo spread copia le proprietà enumerabili di un oggetto dentro un altro oggetto:

const combinato = {
  ...profiloBase,
  ...preferenze
};

Se due oggetti possiedono una proprietà con lo stesso nome, vince quella definita più a destra:

const risultato = {
  tema: "chiaro",
  ...preferenze
};

Poiché preferenze contiene il tema “scuro”, il valore finale di tema sarà “scuro”. Questa regola è utile per applicare configurazioni predefinite e successivamente sovrascriverle con valori personalizzati.

Copie superficiali

Lo spread crea una copia superficiale, cioè copia il primo livello della struttura. Se un oggetto contiene altri oggetti o array, quelli interni restano condivisi:

const originale = {
  nome: "Luca",
  contatto: {
    citta: "Roma"
  }
};

const copia = { ...originale };

copia.contatto.citta = "Milano";

console.log(originale.contatto.citta); // Milano

Per dati annidati è quindi necessario prestare attenzione oppure creare copie più profonde con tecniche adeguate al caso d’uso.

Best practice

  • Usa nomi espliciti: gli alias della destrutturazione devono rendere chiaro il significato del dato.
  • Preferisci nuove strutture: usa lo spread per aggiornare oggetti e array senza modificarli direttamente.
  • Controlla le proprietà opzionali: i valori predefiniti aiutano a evitare variabili non definite.
  • Non abusare della sintassi: una destrutturazione troppo lunga può essere meno leggibile di alcune assegnazioni separate.
  • Ricorda la copia superficiale: lo spread non clona automaticamente tutti i livelli interni.
  • Usa lo spread per le configurazioni: definisci prima i valori predefiniti e poi applica le personalizzazioni.

Riepilogo

La destrutturazione permette di estrarre rapidamente valori da oggetti e array. Con gli oggetti si basa sui nomi delle proprietà, mentre con gli array si basa sull’ordine degli elementi. È possibile usare alias, valori predefiniti e una sintassi rest per raccogliere i dati rimanenti.

L’operatore spread consente di creare nuovi array e oggetti, unendo dati provenienti da più sorgenti oppure aggiornando singole proprietà. Questa tecnica favorisce un approccio immutabile, molto utile quando l’applicazione diventa più complessa. È comunque necessario ricordare che la copia prodotta è superficiale.

Approfondisci con risorse ufficiali

  • MDN Web Docs – Destructuring assignment: documentazione completa sulla destrutturazione di array e oggetti.
  • MDN Web Docs – Spread syntax: dettagli sull’uso dell’operatore spread con array, oggetti e chiamate di funzione.
  • ECMAScript Language Specification: riferimento tecnico ufficiale alla sintassi e al comportamento del linguaggio JavaScript.

SHARE