Dati primitivi e dati di riferimento in JavaScript
In JavaScript, esistono due tipi di dati: i dati primitivi (primitive) e i dati di riferimento (reference). Comprendere le differenze tra questi due tipi è fondamentale per scrivere codice efficiente e comprenderne il comportamento.
In questa pagina, esploreremo le caratteristiche dei dati primitivi e dei dati di riferimento, analizzando come vengono memorizzati e manipolati.
Dati primitivi in JavaScript
I dati primitivi sono i tipi di dati fondamentali in JavaScript. Sono immutabili, il che significa che, una volta creati, non possono essere modificati. I dati primitivi vengono memorizzati direttamente nello spazio di memoria assegnato alla variabile.
I cinque tipi di dati primitivi in JavaScript sono:
Number: Rappresenta i numeri, sia interi che decimali. Ad esempio: let numero = 42;
String: Rappresenta una sequenza di caratteri, racchiusi tra apici singoli o doppi. Ad esempio: let nome = "Alice";
Boolean: Rappresenta un valore di verità, true o false. Ad esempio: let èStudente = true;
Null: Rappresenta un valore nullo o vuoto. Ad esempio: let risultato = null;
Undefined: Rappresenta una variabile non inizializzata. Ad esempio: let valore;
let numero = 10;
let messaggio = "Ciao!";
let esito = true;
let prezzo = null;
let descrizione;
Dati di riferimento in JavaScript
I dati di riferimento, a differenza dei dati primitivi, vengono memorizzati nello spazio di memoria separato dallo spazio assegnato alla variabile. La variabile conterrà un riferimento a quel luogo di memoria piuttosto che il valore effettivo. I dati di riferimento includono oggetti, array, funzioni e altri oggetti complessi definiti dall'utente.
Esempi di dati di riferimento:
let persona = { nome: "Marco", eta: 30 };
let colori = ["rosso", "verde", "blu"];
function saluta(nome) {
console.log("Ciao, " + nome + "!");
}
Nell'esempio, la variabile persona contiene un riferimento a un oggetto con proprietà nome ed età, mentre colori contiene un riferimento a un array di colori. La variabile saluta contiene un riferimento a una funzione.
Passaggio per valore vs passaggio per riferimento
Una differenza fondamentale tra dati primitivi e dati di riferimento riguarda il passaggio di questi dati a funzioni o variabili. Quando passiamo un dato primitivo a una funzione o lo assegniamo a una variabile, viene passato per valore, ovvero viene creato un duplicato del dato. Modificando il dato all'interno della funzione o della variabile non influenzerà il valore originale.
D'altro canto, quando passiamo un dato di riferimento a una funzione o lo assegniamo a una variabile, viene passato per riferimento. In altre parole, la funzione o la variabile avrà un riferimento allo stesso oggetto in memoria. Modificando l'oggetto all'interno della funzione o della variabile influenzerà il valore originale.
Esempio di passaggio per valore e passaggio per riferimento:
// Passaggio per valore
let a = 5;
function raddoppia(numero) {
numero = numero * 2;
console.log(numero); // Stampa: 10
}
raddoppia(a);
console.log(a); // Stampa: 5 (non è stato modificato)
// Passaggio per riferimento
let persona = { nome: "Luca", eta: 25 };
function cambiaEta(p) {
p.eta = 30;
}
cambiaEta(persona);
console.log(persona); // Stampa: { nome: "Luca", eta: 30 } (è stato modificato)
Quando utilizzare dati primitivi o dati di riferimento
È importante scegliere tra dati primitivi e dati di riferimento a seconda delle esigenze del nostro codice. I dati primitivi sono più efficienti in termini di memoria e possono essere copiati facilmente senza influenzare i dati originali. I dati di riferimento, d'altra parte, consentono di gestire strutture dati complesse e oggetti con proprietà e metodi.