Junior
Na czym polega różnica między różnymi typami danych?
sobes.tech AI
Odpowiedź od AI
W JavaScript dane dzielą się na typy pierwotne i obiekty.
Typy pierwotne:
- String: Ciąg znaków. Niezmienny.
- Number: Liczby, w tym liczby całkowite i zmiennoprzecinkowe, a także
Infinity,-InfinityiNaN. - Boolean: Wartość logiczna (
truelubfalse). - Null: Specjalna wartość reprezentująca brak obiektu.
- Undefined: Wartość zmiennej, której nie przypisano wartości.
- Symbol: Unikalny i niezmienny typ pierwotny, używany do identyfikacji właściwości obiektu.
- BigInt: Liczby całkowite dowolnej długości.
Obiekty:
- Object: Kolekcja par klucz-wartość. Zmienny. Przykłady: tablice, funkcje, wyrażenia regularne, daty.
Główne różnice:
- Zmienność (Mutability): Typy pierwotne są niezmiennicze, tzn. nie można zmienić ich wartości bezpośrednio. Przy próbie zmiany tworzona jest nowa kopia. Obiekty są zmienne, ich właściwości można dodawać, usuwać i modyfikować.
- Przekazywanie przez wartość/przez referencję: Typy pierwotne są przekazywane przez wartość (kopiuje się sama wartość). Obiekty są przekazywane przez referencję (kopiuje się odwołanie do miejsca w pamięci, gdzie przechowywany jest obiekt).
- Porównanie: Typy pierwotne są porównywane przez wartość. Obiekty są porównywane przez referencję (dwie zmienne odwołują się do tego samego obiektu w pamięci).
// Przykłady
let str1 = "hello";
let str2 = str1; // str2 otrzymuje kopię wartości str1
str1 = "world"; // Tworzy się nowy łańcuch "world" dla str1
console.log(str2); // "hello" - str2 się nie zmienił
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 otrzymuje odwołanie do tego samego obiektu co obj1
obj1.name = "Bob"; // Zmienia się właściwość obiektu, na który wskazują obie zmienne
console.log(obj2.name); // "Bob" - obj2 się zmienił
let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - porównują się wartości
let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - porównują się referencje (wskazują na różne obiekty mimo tego samego zawartości)
Tabela różnic:
| Cecha | Typy pierwotne | Obiekty |
|---|---|---|
| Zmienność | Niezmiennicze | Zmiennicze |
| Przekazywanie | Przez wartość | Przez referencję |
| Porównanie | Przez wartość | Przez referencję |
| Przechowywanie | Bezpośrednio w zmiennej | Odwołanie do miejsca w pamięci |
| Typy danych | String, Number, Boolean, Null, Undefined, Symbol, BigInt | Obiekt (w tym tablice, funkcje itp.) |