Jeden z hlavních rozdílů mezi objektem a primitivní hodnotou, který se často uvádí je, že objekt může obsahovat metody a členské proměnné, zatímco primitivní datový typ ne. V JavaScriptu jsou primitivní datové typy řetězce, čísla, logické hodnoty a symbolické typ a další.
V mnoha případech se JavaScript chová jako u primitivních datových typů volat metody šlo.
Například, tento kód je zcela funkční a vykoná se bez problémů v každém prostředí a vrátí nám řetězec "PROVÝVOJÁŘE".
"proVývojáře".toUpperCase();
Zdá se, že uvedený text "proVývojáře" má metodu toUpperCase()
.
Logicky by nám tu mělo něco nesedět s tím, jak se učíme o objektech a primitivních typech. Je tedy v JavaScriptu je všechno objekt? Ne. Je to trochu jinak.
JavaScript používá totiž v tomto případě magickou berličku, které se říká Boxing/Wrapper Object pro primitivní datové typy. Tento Wrapper Object je dočasný a vytvoří se pouze v tomto konkrétním výpočtu a po skončení se zruší.
Takže předchozí kód funguje spíše následovně
(String("test")).toUpperCase()
Zde je několik příkladů použití stavu Wrapper Object v JavaScriptu:
Použití metody na řetězec:
let str = 'hello';
let upper = str.toUpperCase(); // vytvoří se Wrapper Object pro řetězec "hello" a použije se metoda toUpperCase()
console.log(upper); // vypíše se "HELLO"
Použití vlastnosti na číslo:
let num = 42;
let str = num.toString(); // vytvoří se Wrapper Object pro číslo 42 a použije se vlastnost toString()
console.log(str); // vypíše se "42"
Použití metody na logickou hodnotu:
let bool = true;
let str = bool.toString(); // vytvoří se Wrapper Object pro logickou hodnotu true a použije se metoda toString()
console.log(str); // vypíše se "true"
Lidé si často myslí, že v JS je všechno objekt. Téměř všechny datové typy se chovají jako objekty, ale ve skutečnosti jimi nejsou.