JavaScriptové zákeřnosti

cs v kategorii code • 3 min. čtení

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.



Sdílejte:   Facebook   Twitter   Reddit   Tumblr   Pinterest




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

en What Makes Good Program?, November 20, 2018
en Old Code, October 31, 2018
en Fast JSON Schema for Python, October 1, 2018
en Open Source Responsibilities, September 6, 2018
en Deployment of Python Apps, August 15, 2018


Populární v kategorii code

en Makefile with Python, November 6, 2017
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
cs Pokročilé regulární výrazy, August 17, 2014