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șiNaN. - Boolean: Valoare logică (
truesaufalse). - 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:
- 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.
- 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).
- 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.) |