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.
