Boxing a Wrapper objekty

AndreaAndrea

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.