Propagace výjimek v JavaScriptu

Podívejme se na blok catch úlohy s JSON produktu:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nekorektní JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produkt nemá cenu nebo množství');
  }
}

Jak vidíte, zachycujeme dvě plánované výjimky a nějak na ně reagujeme. Ale co se stane, když nastane nepředpokládaná výjimka jiného typu? V tomto případě se také dostane do bloku catch, ale nedojde k žádné reakci, protože výjimka s jiným typem jednoduše nespadne do žádného z našich ifů.

Když říkám, že nedojde k žádné reakci, myslím tím, že skutečně k žádné: ani se neobjeví chyba v konzoli. Náš kód bude jednoduše mlčky nefungovat.

Proto existuje následující pravidlo: váš kód by měl zachytávat pouze ty výjimky, se kterými ví, jak si poradit. Pokud je výjimka neznámá, je ji třeba propagovat dále pomocí throw. V tomto případě ji výše zachytí někdo lépe informovaný nebo se výjimka objeví jako chyba v konzoli.

Pojďme opravit náš kód:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nekorektní JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produkt nemá cenu nebo množství');
  } else {
    throw error; // propagujeme výjimku dál
  }
}
Задание 1

Je dán následující kód:

javascripttry {
  let arr = JSON.parse(json);

  for (let i = 0; i < arr.length; i++) {
    localStorage.setItem(i, arr[i]);
  }
} catch (error) {
  if (error.name == 'QuotaExceededError') {
    alert('došlo místo v úložišti');
  }
  
  if (error.name == 'SyntaxError') {
    alert('nekorektní JSON');
  }
}

Co je špatně na tomto kódu? Opravte jej na vhodnější.