Vyhazování výjimek v JavaScriptu

V předchozích lekcích jsme studovali dvě místa, ve kterých JavaScript vyhazuje výjimku v případě nějakých problémů.

Ve vašem projektu však mohou být i jiné situace, které pro vás jsou výjimečné, ale pro JavaScript - ne. V takovém případě můžete vytvářet a vyhazovat své, uživatelské výjimky.

Pojďme si rozebrat syntaxi, potřebnou k tomuto. Pro začátek je třeba vytvořit výjimku pomocí příkazu new Error, parametrem předat text výjimky:

javascriptnew Error('text výjimky');

Poté tuto výjimku je třeba vyhodit pomocí příkazu throw:

javascriptthrow new Error('text výjimky');

Vyhazování výjimky nutí JavaScript považovat, že nastala výjimečná situace. To znamená, že takovou výjimku lze zachytit pomocí konstrukce try-catch a zpracovat potřebným způsobem.

Podívejme se na příkladu, jak toho využívat. Nechť máme funkci, která dělí jedno číslo druhým:

javascriptfunction div(a, b) {
  return a / b;
}

Budeme považovat, že dělení nulou je zakázáno a při pokusu o to má vzniknout výjimečná situace. K tomu budeme kontrolovat ve funkci, zda nedochází k pokusu dělit 0. Pokud ne - budeme dělit, a pokud ano - budeme házet výjimku:

javascriptfunction div(a, b) {
  if (b !== 0) {
    return a / b;
  } else {
    throw new Error('chyba dělení nulou');
  }
}

Nejprve zkusme prostě vydělit 0, bez zachycení výjimky:

javascriptalert( div(3, 0) );

V tomto případě se provedení skriptu přeruší a v konzoli se objeví chyba s textem 'chyba dělení nulou' (zkontrolujte). Nyní budeme zachycovat naši chybu a nějak ji zpracovávat:

javascripttry {
  alert( div(3, 0) );
} catch (error) {
  alert('pokoušíte se dělit nulou, což je zakázáno');
}
Задание 1

V JavaScriptu pokus o odmocnění záporného čísla nevede k vyhazování výjimky:

javascriptlet result = Math.sqrt(-1);
console.log(result); // vypíše NaN

Napište vlastní funkci, která bude odmocňovat číslo a přitom vyhazovat výjimku, pokud se odmocňuje ze záporného čísla.