Sobes.tech
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, -Infinity i NaN.
  • Boolean: Wartość logiczna (true lub false).
  • 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:

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