Sobes.tech
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, -Infinity e NaN.
  • Boolean: Valore logico (true o false).
  • 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:

  1. 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.
  2. 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).
  3. 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.)