Junior
V čem spočívá rozdíl mezi různými datovými typy?
sobes.tech AI
Odpověď od AI
V JavaScriptu jsou data rozdělena na primitivní typy a objekty.
Primitivní typy:
- String: Řetězec znaků. Neměnný.
- Number: Čísla, včetně celých a s plovoucí desetinnou čárkou, a také
Infinity,-InfinityaNaN. - Boolean: Logická hodnota (
truenebofalse). - Null: Speciální hodnota představující absenci objektu.
- Undefined: Hodnota proměnné, které nebylo přiřazeno žádné hodnoty.
- Symbol: Unikátní a neměnný primitivní typ, používaný jako identifikátory vlastností objektu.
- BigInt: Celá čísla libovolné délky.
Objekty:
- Object: Kolekce párů klíč-hodnota. Měnitelné. Příklady: pole, funkce, regulární výrazy, data.
Hlavní rozdíly:
- Měnitelnost (Mutability): Primitivní typy jsou neměnné, tj. jejich hodnotu nelze přímo změnit. Při pokusu o změnu se vytvoří nová kopie. Objekty jsou měnitelné, jejich vlastnosti lze přidávat, odstraňovat a měnit.
- Předání podle hodnoty/odkazu: Primitivní typy se předávají podle hodnoty (kopíruje se samotná hodnota). Objekty se předávají podle odkazu (kopíruje se odkaz na místo v paměti, kde je objekt uložen).
- Porovnání: Primitivní typy se porovnávají podle hodnoty. Objekty se porovnávají podle odkazu (dvě proměnné odkazují na stejný objekt v paměti).
// Příklady
let str1 = "hello";
let str2 = str1; // str2 získá kopii hodnoty str1
str1 = "world"; // Vytvoří se nový řetězec "world" pro str1
console.log(str2); // "hello" - str2 se nezměnil
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 získá odkaz na stejný objekt jako obj1
obj1.name = "Bob"; // Změní se vlastnost objektu, na který odkazují obě proměnné
console.log(obj2.name); // "Bob" - obj2 se změnil
let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - hodnoty jsou stejné
let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - porovnávají se odkazy (odkazují na různé objekty, i když mají stejný obsah)
Tabulka rozdílů:
| Vlastnost | Primitivní typy | Objekty |
|---|---|---|
| Měnitelnost | Neměnné | Měnitelné |
| Předání | Podle hodnoty | Podle odkazu |
| Porovnání | Podle hodnoty | Podle odkazu |
| Uložení | Přímo v proměnné | Odkaz na místo v paměti |
| Datové typy | String, Number, Boolean, Null, Undefined, Symbol, BigInt | Objekt (včetně polí, funkcí atd.) |