logo

Záhady Javascriptu

Během let strávených tvorbou různých widgetů a her v Javascriptu, jsem již narazil na nejednu absurdní záležitost, která se v něm vyskytuje. O ty nejzajímavější bych se chtěl podělit


Pro vyzkoušení následujících ukázek, můžete použít například vývojářské nástroje (standardně v prohlížeči dostupné pod klávesou F12) a kód rovnou zapisovat do konzole.

Javascript občas dokáže hezky potrápit. Říkáte si například, že operátor rovnosti nebo nerovnosti má jasně daná pravidla a nemůže vás tedy nijak překvapit ? Opak může být pravdou.

Jako první můžeme vyzkoušet jednoduché porovnání pole s jedním prvkem. Nejprve si vytvořím pole do proměnné x: x = [0] když následně toto pole zkusím porovnat samo se sebou: x == x pak výsledek bude zcela podle očekávání „true“. Co se ale stane když na jedné ze stran použiji negaci? x == !x Tady už je situace poněkud matoucí. Vrácená hodnota je totiž opět „true“. Matoucí že ?

Dobrá, co zkusit trochu více magie ? Například zkusit porovnat maximální a minimální hodnoty získané od třídy Math ? Math.max() < Math.min() → true
Math.max() > Math.min() → false
Záhada že ?

No, tak alespoň booleovské hodnoty by mohly trochu dávat smysl. Co takhle? true + true === 2 → true To je trochu podivné, ale dá se to pochopit. Pak samozřejmě dává smysl i následující: true – true === 0 → true Z výše uvedeného by tedy člověk předpokládal, že hodnota „true“ bude mít numerickou hodnotu 1, avšak opak je pravdou: true === 1 → false 

A nakonec trochu té programátorské zábavy. Co asi zjistíme, pokud chceme zjistit, co za datový typ je NaN (Not a number)? typeof NaN → „number“ 

Javascript však skrývá nejméně desítky dalších podobných libůstek, o kterých se možná zmíním jindy. Tyto však patří mezi ty, se kterými jsem se setkal nejčastěji a se kterými je občas třeba počítat při návrhu reálných aplikací