This article has been localized into Czech by the community.
Úvod
Zpracování chyb je jedním z nejdůležitějších aspektů programování - je těžké najít rozsáhlou, složitou základnu kódu, která neobsahuje žádné chyby. Problém s těmito chybami spočívá v tom, že jen některé z nich může zachytit interpret a/nebo kompilátor - zbytek chyb se projeví jen za určitých podmínek.
U některých programovacích jazyků máme kompilátor, který zkontroluje celý kód kvůli nejzřejmějším chybám a upozorní na ně, než dovolí kód zkompilovat a spustit. A pak máme JavaScript, který obecně není kompilován, ale interpretován za běhu. To znamená, že jen běžné syntaxní chyby mohou být zachyceny, když je kód spuštěn.
Syntaktické chyby
Zvažte tento příklad, kde jsem udělal docela zřejmou syntaktickou chybu:
alert("test 1");
alert("test 2);
alert("test 3");
Jak vidíte, zapomněl jsem na koncovou dvojitou uvozovku na druhé řádce. Tato chyba je tak zřejmá, že interpret zastaví vykonávání kódu a okamžitě vyhodí chybu, což způsobí, že žádná ze tří řádků nebude nikdy provedena. Chybová zpráva bude záviset na interpretu, ale typicky bude vypadat nějak takto:
Uncaught SyntaxError: Invalid or unexpected token "
Tato chyba je zachycena okamžitě, protože interpret JavaScriptu musí před pokusem o provedení kódu zajistit, že kód je platný, a se syntaktickou chybou, kterou jsem udělal, kód prostě platný není.
Chyby za běhu (runtime errors)
Ale některé chyby jsou méně zřejmé a proto nejsou zachyceny před začátkem vykonávání kódu. Často se jim říká chyby za běhu. Vezměte v úvahu tento příklad:
let user =
{
name:
{
firstName: "John",
lastName: "Doe"
}
};
alert(user.name.firstName);
alert(user.Name.lastName);
V posledním řádku jsem udělal malý překlep, když jsem napsal "Name" místo "name". Jelikož je JavaScript citlivý na velkost písmen, to znamená, že se snažím přistoupit k vlastnosti (lastName) na nedefinovaném objektu ("Name" není definováno - definováno je pouze "name").
Avšak jelikož je JavaScript dynamický jazyk, nelze rozhodnout, zda se jedná o chybu, než je kód spuštěn (za běhu). Pokud tedy tento kód zkusíte spustit, uvidíte první upozornění a teprve poté je vykonávání zastaveno a je vyhozena chyba:
Uncaught TypeError: Cannot read properties of undefined (reading 'lastName')
Je důležité znát rozdíl mezi těmito dvěma typy chyb, protože brzy začnete psát složitější kódy a potom si uvědomíte, že zatímco syntaktické chyby jsou poměrně snadno řešitelné, chyby za běhu jsou mnohem záludnější kvůli své povaze: Chyby za běhu odhalíte pouze v okamžiku, kdy je specifická část kódu spuštěna.
Naštěstí pro nás je dalším rozdílem mezi syntaktickými chybami a chybami za běhu skutečnost, že s chybami za běhu můžeme skutečně něco aktivně udělat: Můžeme je zachytit a řešit je, což umožní pokračování vykonávání vašeho kódu, i když se stane něco neočekávaného. O tomto budeme mluvit mnohem více v následujících článcích.
Shrnutí
Zpracování chyb v kódu (často označovaných jako chyby nebo "bugy") je velkou součástí práce s jakýmkoli programovacím jazykem, včetně JavaScriptu, kde chyby za běhu mohou zastavit vykonávání vašeho kódu a tím způsobit nefunkčnost vaší webové stránky/aplikace. Přejděte k dalšímu článku, kde budeme mluvit o tom, jak můžeme zachytit a zpracovat chyby za běhu.