JavaScriptové zákeřnosti

cs v kategorii code • 3 min. čtení
Mind the age! Most likely, its content is outdated. Especially if it’s technical.

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.








Může se vám také líbit

en Makefile with Python, November 6, 2017
en Fast JSON Schema for Python, October 1, 2018
en Deployment of Python Apps, August 15, 2018
cs Jasně, umím Git…, August 6, 2014
cs Checklist na zabezpečení webových aplikací, March 1, 2016

Další články z kategorie code.
Nenechte si ujít nové články díky Atom/RSS kanálu.



Poslední příspěvky

cs Zubní pohotovost, October 19, 2021 in family
en Dancers Are Not Deaf (Yet), October 12, 2021 in dance
cs Je dobré mýti Matýska, October 4, 2021 in family
cs Jsem levák…?, September 21, 2021 in family
en Human Evolution of the Past and Future, September 14, 2021 in humanity