Пример за исклучок со data- атрибути во JavaScript
Нека при вчитување на страницата серверот креира HTML код, во кој се чуваат име, цена и количина на купениот производ:
<div id="product" data-product="јаболко" data-price="1000" data-amount="5"></div>
Ајде да направиме функција, која ќе прима референца до елементот со производот и ќе ја наоѓа вкупната цена на производот (цената ќе се множи со количината):
function getCost(elem) {
return elem.dataset.price * elem.dataset.amount;
}
Ајде да ја најдеме цената на нашиот производ:
let product = document.querySelector('#product');
let cost = getCost(product);
alert(cost);
Да ја замислиме сега следнава ситуација: поради некаков проблем на серверот, тој ни испрати производ, во кој недостасува цена или количина (или и двете одеднаш), на пример, вака:
<div id="product" data-product="јаболко" data-price="1000"></div>
Ако сега се обиде да се пресмета цената на производот, резултатот на екранот ќе биде NaN. Се согласувате, не е многу информативно.
Излегува, ние треба некако да се заштитиме од тоа да недостасуваат атрибутите што ни се потребни. Ова може да се направи на два начина. Првиот начин е да се каже дека ова е нормално однесување и едноставно да се провери со if услови дали ги има потребните атрибути:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
return 0; // враќаме нешто, на пример, 0 или null или false
}
}
Втората опција е да се каже дека недостасувањето
на атрибутот data-price или data-amount
- е исклучителна ситуација. Во овој случај
ние ќе фрламе исклучок:
function getCost(elem) {
if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
return elem.dataset.price * elem.dataset.amount;
} else {
throw {
name: 'ProductCostError',
message: 'недостасува цена или количина на производот'
};
}
}
Која од двете опции е поприкладна овде - тоа е избор на програмерот. Тој може да ја смета проблематиката за нормална работа на скриптата или за исклучителна ситуација.
Да речеме дека одлучивме дека ситуацијата е исклучителна. Тогаш кодот за добивање на цената на производот ќе изгледа вака:
let product = document.querySelector('#product');
try {
let cost = getCost(product);
alert(cost);
} catch (error) {
// некако реагираме на исклучокот
}
Променете го мојот код така што функцијата getCost
ќе фрла два типа на исклучоци: ако недостасува
цената и ако недостасува количината. Добро
размислете за имињата на овие исклучоци.
Во блокот catch прикажете различни пораки за
грешка за исклучоци од различни типови.