JavaScriptové zákeřnosti

cs in code • 3 min read

Určitě všichni znáte Watmana. Pokud si nepamatujete, určitě jste aspoň slyšeli o lightning talk Wat. A jestli ne, určitě se nejprve podívejte. Osobně mi to přijde zábavné, ale nikdy mě to nějak netrápilo (snad krom sčítání polí), protože kdo by v JavaScriptu chtěl sčítat pole s objektem nebo dva objekty? Nenapadá mě žádný rozumný příklad, kde toho využít.

Nedávno jsem na Twitteru narazil na podobnou srandičku:

alert("1"+"1"); 11 alert("1"-"1"); 0 Whatever you think of JavaScript crypto libraries, at least the language is pretty good at randomness.

— Martijn Grooten (@martijn_grooten) June 17, 2014

Ano, může to vést k chybám, ale rozhodně to nemá nic společného s náhodou. Vysvětlení jak z videa, tak k tomuto, můžete najít na Stackoverflow tady. JavaScript se snaží nejprve přetypovat proměnné do podoby, kterou pravděpodobně potřebujeme. Vše je logicky odůvodnitelné.

Ono se dá takovéto chování pochopit, přihlédne-li se k tomu, pro co byl JavaScript stvořen – pro web. A na webu se komunikuje s uživatelem v řetězcích. Pokud vstupem je číslo, datum či cokoliv jiného, nikoliv text, musíme si to ohlídat sami. To samé se děje na backendu, kde musíme řešit stejnou věc – z requestu také dostaneme jen řetězce a kontrolu a převod do správných typů si musíme ošetřit. Teď už jen záleží, co je každému z nás bližší – zda je lepší nechat aplikaci spadnout či nějakými pravidly zkusit odhadnout, co dělat, a pokračovat.

Ať tak či onak, v obou případech si musíme nějak pomoct a nedoufat na automatiku daného jazyka. Osobně si myslím, že na klientské straně je toto chování asi i lepší. Při chybě je možnost, že aplikace poběží bez problémů dál (nebo taky může spadnou o kousek dál a pak je sranda najít, kde chyba vznikla).

Každopádně jsem ve stejný den narazil ještě na jeden tweet:

JavaScript: A Great Place to Work (via @konklone) pic.twitter.com/UkAZVveAjR

— Jeff Atwood (@codinghorror) June 11, 2014

To mě docela překvapilo. Vysvětlení dává zase smysl. Tady ale už srandičky končí.

JavaScript se mi líbí, ale některé jeho nástrahy jsou zákeřné. Nejen ty výše zmíněné, další za zmínění stojí třeba porovnání polí ([1,2,3] == [1,2,3] // false), či že null je object (typeof null // "object")… Z toho důvodu rád používám CoffeeScript s Closure Library. Některé zákeřnosti si tak odfiltruji, ale přitom se nijak nevzdávám žádných vlastností jazyka. A vám doporučuji udělat to samé. Ne nutně to samé, co používám já, ani co opěvuje někdo jiný. Sáhněte po něčem, co vám sedne. Možností je dost: CoffeeScript, TypeScript, Dart, Closure Library, … (pozor – jQuery zde není řešením) Důležité je něco si vybrat a používat.





You may also like



Popular from code