Junior
Qual è la differenza tra i diversi tipi di dati?
sobes.tech AI
Risposta dell'AI
In JavaScript, i dati sono divisi in tipi primitivi e oggetti.
Tipi primitivi:
- String: Sequenza di caratteri. Immutabile.
- Number: Numeri, inclusi interi e a virgola mobile, così come
Infinity,-InfinityeNaN. - Boolean: Valore logico (
trueofalse). - Null: Valore speciale che rappresenta l'assenza di un oggetto.
- Undefined: Valore di una variabile a cui non è stato assegnato un valore.
- Symbol: Tipo primitivo unico e immutabile, usato per identificatori di proprietà degli oggetti.
- BigInt: Numeri interi di lunghezza arbitraria.
Oggetti:
- Object: Collezione di coppie chiave-valore. Mutabile. Esempi: array, funzioni, espressioni regolari, date.
Principali differenze:
- Mutabilità: I tipi primitivi sono immutabili, cioè il loro valore non può essere modificato direttamente. Quando si tenta di modificarli, viene creata una nuova copia. Gli oggetti sono mutabili, le loro proprietà possono essere aggiunte, rimosse e modificate.
- Passaggio per valore/per riferimento: I tipi primitivi vengono passati per valore (il valore stesso viene copiato). Gli oggetti vengono passati per riferimento (si copia il riferimento al luogo in memoria dove è memorizzato l'oggetto).
- Confronto: I tipi primitivi vengono confrontati per valore. Gli oggetti vengono confrontati per riferimento (due variabili puntano allo stesso oggetto in memoria).
// Esempi
let str1 = "hello";
let str2 = str1; // str2 ottiene una copia del valore di str1
str1 = "world"; // Viene creata una nuova stringa "world" per str1
console.log(str2); // "hello" - str2 non è cambiato
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 ottiene il riferimento allo stesso oggetto di obj1
obj1.name = "Bob"; // La proprietà dell'oggetto referenziato viene modificata
console.log(obj2.name); // "Bob" - anche obj2 è cambiato
let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - i valori vengono confrontati
let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - vengono confrontate le referenze (puntano a oggetti diversi anche se hanno lo stesso contenuto)
Tabella delle differenze:
| Caratteristica | Tipi primitivi | Oggetti |
|---|---|---|
| Mutabilità | Immutabili | Mutabili |
| Passaggio | Per valore | Per riferimento |
| Confronto | Per valore | Per riferimento |
| Memorizzazione | Direttamente nella variabile | Riferimento al luogo in memoria |
| Tipi di dati | String, Number, Boolean, Null, Undefined, Symbol, BigInt | Oggetto (inclusi array, funzioni, ecc.) |