Пример исключения с data- атрибутами в JavaScript

Пусть при загрузке страницы сервер создает HTML код, в котором хранится название, цена и количество купленного продукта:

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

Давайте сделаем функцию, которая будет принимать ссылку на элемент с продуктом и находить полную стоимость товара (цену умножать на количество):

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

Найдем стоимость нашего продукта:

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

alert(cost);

Предположим теперь следующую ситуацию: из-за какого-то сбоя на сервере он прислал нам товар, в котором отсутствует цена или количество (или оба сразу), например, вот так:

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

Если теперь попробовать посчитать стоимость товара, то результате на экран выведется NaN. Согласитесь, не очень информативно.

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

javascriptfunction 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 - исключительная ситуация. В этом случае мы будем выбрасывать исключение:

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

Какой из двух вариантов здесь уместнее применить - это выбор программиста. Он может считать проблему нормальной работой скрипта или исключительной ситуацией.

Пусть мы решили, что ситуация исключительная. Toгда код получения стоимости товара будет выглядеть вот так:

javascriptlet product = document.querySelector('#product');

try {
  let cost = getCost(product);
  alert(cost);
} catch (error) {
  // как-то реагируем на исключение
}
Задание 1

Переделайте мой код так, чтобы функция getCost выбрасывала два типа исключений: если отсутствует цена и если отсутствует количество. Хорошо подумайте над названиями этих исключений. В блоке catch выведите разные сообщения об ошибке для исключений разных типов.