⊗jsSpExcDAE 148 of 294 menu

Příklad výjimky s data- atributy v JavaScriptu

Nechť při načtení stránky server vytvoří HTML kód, ve kterém je uložen název, cena a množství zakoupeného produktu:

<div id="product" data-product="jablko" data-price="1000" data-amount="5"></div>

Vytvořme funkci, která bude přijímat odkaz na element s produktem a zjistí celkovou cenu zboží (cena vynásobená množstvím):

function getCost(elem) { return elem.dataset.price * elem.dataset.amount; }

Pojďme zjistit cenu našeho produktu:

let product = document.querySelector('#product'); let cost = getCost(product); alert(cost);

Předpokládejme nyní následující situaci: kvůli nějaké poruše na serveru nám poslal zboží, ve kterém chybí cena nebo množství (nebo obojí najednou), například takto:

<div id="product" data-product="jablko" data-price="1000"></div>

Pokud nyní zkusíme spočítat cenu zboží, výsledek na obrazovce zobrazí NaN. Přiznejte, ne příliš informativní.

Ukazuje se, že se musíme nějak pojistit proti tomu, že budou chybět potřebné atributy. To lze udělat dvěma způsoby. První způsob je říci, že toto je normální chování a jednoduše kontrolovat pomocí ifů přítomnost potřebných atributů:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // vrátíme něco, například 0 nebo null nebo false } }

Druhá možnost - je říci, že absence atributu data-price nebo data-amount - je výjimečná situace. V tomto případě budeme vyhazovat výjimku:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'chybí cena nebo množství u produktu' }; } }

Kterou z těchto dvou variant je zde vhodnější použít - je na volbě programátora. Může považovat problém za normální chování skriptu nebo za výjimečnou situaci.

Předpokládejme, že jsme se rozhodli, že situace je výjimečná. Pak bude kód pro získání ceny zboží vypadat takto:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // nějak reagujeme na výjimku }

Upravte můj kód tak, aby funkce getCost vyhazovala dva typy výjimek: pokud chybí cena a pokud chybí množství. Dobře promyslete názvy těchto výjimek. V bloku catch zobrazte různé zprávy o chybě pro výjimky různých typů.

uzazplhums