⊗jsSpExcDAE 148 of 294 menu

Beispiel für eine Ausnahme mit data-Attributen in JavaScript

Nehmen wir an, beim Laden der Seite erstellt der Server HTML-Code, in dem der Name, der Preis und die Menge des gekauften Produkts gespeichert sind:

<div id="product" data-product="яблоко" data-price="1000" data-amount="5"></div>

Erstellen wir eine Funktion, die einen Verweis auf das Produktelement entgegennimmt und den Gesamtpreis der Ware ermittelt (Preis multipliziert mit der Menge):

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

Lassen Sie uns die Kosten unseres Produkts ermitteln:

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

Nehmen wir nun folgende Situation an: aufgrund einer Art Fehler auf dem Server hat er uns eine Ware geschickt, bei der der Preis oder die Menge (oder beide gleichzeitig) fehlen, zum Beispiel so:

<div id="product" data-product="яблоко" data-price="1000"></div>

Wenn Sie nun versuchen, die Kosten der Ware zu berechnen, wird das Ergebnis NaN auf dem Bildschirm ausgegeben. Zugegeben, nicht sehr aussagekräftig.

Es stellt sich heraus, dass wir uns irgendwie dagegen absichern müssen, dass die benötigten Attribute fehlen. Dies kann auf zwei Wegen geschehen. Der erste Weg ist zu sagen, dass dies ein normales Verhalten ist und einfach mit if-Abfragen das Vorhandensein der benötigten Attribute zu prüfen:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // geben wir etwas zurück, z.B. 0 oder null oder false } }

Die zweite Möglichkeit ist zu sagen, dass das Fehlen des Attributs data-price oder data-amount - eine Ausnahmesituation ist. In diesem Fall werfen wir eine Ausnahme:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'отсутствует цена или количество у продукта' }; } }

Welche der beiden Varianten hier angemessener anzuwenden ist - das ist die Entscheidung des Programmierers. Er kann das Problem als normale Skriptarbeit oder als eine außergewöhnliche Situation betrachten.

Nehmen wir an, wir haben entschieden, dass die Situation außergewöhnlich ist. Dann wird der Code zur Ermittlung der Warenkosten so aussehen:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // irgendwie auf die Ausnahme reagieren }

Passen Sie meinen Code so an, dass die Funktion getCost zwei Arten von Ausnahmen wirft: wenn der Preis fehlt und wenn die Menge fehlt. Denken Sie gut über die Namen dieser Ausnahmen nach. Im Block catch geben Sie verschiedene Fehlermeldungen für Ausnahmen unterschiedlichen Typs aus.

hysvuzswro