ВНИМАНИЕ! Скидки на тариф Практик: 700$ 500$!
Обучение, помощь в поиске работы и заказов, стажировка на реальных проектах. Жми для подробностей →
⊗jsSpExcDAE 148 of 294 menu
Бесплатные курсы по Git. Начинаем, когда соберется 1000 желающих:) Жми для записи!

Пример исключения с 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. Согласитесь, не очень информативно.

Получается, нам нужно как-то обезопасится от того, что будут отсутствовать нужные нам атрибуты. Это можно сделать двумя путями. Первый путь - это сказать, что это нормальное поведение и просто проверять ифами наличие нужных нам атрибутов:

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 выведите разные сообщения об ошибке для исключений разных типов.

enru