Sobes.tech
Junior

Care este diferența dintre diferitele tipuri de date?

sobes.tech AI

Răspuns de la AI

În JavaScript, datele sunt împărțite în tipuri primitive și obiecte.

Tipuri primitive:

  • String: Secvență de caractere. Imutabil.
  • Number: Numere, inclusiv întregi și cu virgulă mobilă, precum și Infinity, -Infinity și NaN.
  • Boolean: Valoare logică (true sau false).
  • Null: Valoare specială care reprezintă absența unui obiect.
  • Undefined: Valoare a unei variabile căreia nu i s-a atribuit nicio valoare.
  • Symbol: Tip primitiv unic și imutabil, utilizat pentru identificarea proprietăților obiectelor.
  • BigInt: Numere întregi de lungime arbitrară.

Obiecte:

  • Object: Colecție de perechi cheie-valoare. Modificabil. Exemple: array-uri, funcții, expresii regulate, date.

Diferențe principale:

  1. Modificabilitate (Mutability): Tipurile primitive sunt imuabile, adică nu se poate schimba valoarea lor direct. La încercarea de a le modifica, se creează o copie nouă. Obiectele sunt modificabile, proprietățile lor pot fi adăugate, eliminate și modificate.
  2. Transmitere prin valoare/prin referință: Tipurile primitive sunt transmise prin valoare (se copiază valoarea însăși). Obiectele sunt transmise prin referință (se copiază referința la locația în memorie unde este stocat obiectul).
  3. Comparare: Tipurile primitive sunt comparate după valoare. Obiectele sunt comparate după referință (două variabile indică același obiect în memorie).
// Exemple
let str1 = "hello";
let str2 = str1; // str2 primește o copie a valorii lui str1
str1 = "world"; // Se creează un nou șir "world" pentru str1
console.log(str2); // "hello" - str2 nu s-a schimbat

let obj1 = { nume: "Alice" };
let obj2 = obj1; // obj2 primește referința la același obiect ca și obj1
obj1.nume = "Bob"; // Se modifică proprietatea obiectului la care indică ambele variabile
console.log(obj2.nume); // "Bob" - și obj2 s-a schimbat

let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - se compară valorile

let objA = { valoare: 1 };
let objB = { valoare: 1 };
console.log(objA === objB); // false - se compară referințele (se indică obiecte diferite chiar dacă au conținut identic)

Tabel diferențe:

Caracteristică Tipuri primitive Obiecte
Modificabilitate Imuabile Modificabile
Transmitere Prin valoare Prin referință
Comparare După valoare După referință
Stocare Direct în variabilă Referință la locația în memorie
Tipuri de date String, Number, Boolean, Null, Undefined, Symbol, BigInt Obiect (inclusiv array-uri, funcții etc.)