⊗jsSpExcDAE 148 of 294 menu

Przykład wyjątku z atrybutami data- w JavaScript

Niech przy ładowaniu strony serwer tworzy kod HTML, w którym przechowywana jest nazwa, cena i ilość zakupionego produktu:

<div id="product" data-product="jabłko" data-price="1000" data-amount="5"></div>

Stwórzmy funkcję, która będzie przyjmować odnośnik do elementu z produktem i znajdować pełny koszt towaru (cenę pomnożoną przez ilość):

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

Znajdźmy koszt naszego produktu:

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

Załóżmy teraz następującą sytuację: z powodu jakiejś awarii na serwerze wysłał on nam towar, w którym brakuje ceny lub ilości (lub obu na raz), na przykład tak:

<div id="product" data-product="jabłko" data-price="1000"></div>

Jeśli teraz spróbować obliczyć koszt towaru, to wynik wyświetlony na ekranie będzie NaN. Zgadzicie się, nie zbyt informatywnie.

Okazuje się, że musimy się w jakiś sposób zabezpieczyć przed tym, że będą brakować potrzebnych nam atrybutów. Można to zrobić na dwa sposoby. Pierwszy sposób - to powiedzieć, że to normalne zachowanie i po prostu sprawdzać ifami obecność potrzebnych nam atrybutów:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // zwróćmy coś, na przykład, 0 lub null lub false } }

Drugi wariant - to powiedzieć, że brak atrybutu data-price lub data-amount - to sytuacja wyjątkowa. W tym przypadku będziemy rzucać wyjątek:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'brak ceny lub ilości produktu' }; } }

Który z dwóch wariantów jest tutaj właściwszy do zastosowania - to wybór programisty. Może on uważać problem za normalną pracę skryptu lub za wyjątkową sytuację.

Załóżmy, że zdecydowaliśmy, że sytuacja jest wyjątkowa. Wtedy kod otrzymywania kosztu towaru będzie wyglądać tak:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // w jakiś sposób reagujemy na wyjątek }

Przerób mój kod tak, aby funkcja getCost rzucała dwa typy wyjątków: jeśli brakuje ceny i jeśli brakuje ilości. Dobrze pomyśl nad nazwami tych wyjątków. W bloku catch wyświetl różne komunikaty o błędzie dla wyjątków różnych typów.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć