Przekazywanie wyjątków w JavaScript

Rozważmy blok catch zadania z produktem JSON:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nieprawidłowy JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produkt nie ma ceny lub ilości');
  }
}

Jak widzisz, łapiemy dwa zaplanowane przez nas wyjątki i w jakiś sposób na nie reagujemy. Ale co się stanie, jeśli wystąpi nieprzewidziany przez nas wyjątek innego typu? W tym przypadku również trafi on do bloku catch, ale nie nastąpi żadna reakcja, ponieważ wyjątek z innym typem po prostu nie trafi do żadnego z naszych warunków if.

Kiedy mówię, że nie będzie żadnej reakcji, mam na myśli, że naprawdę żadnej: nawet nie będzie wyrzucenia błędu do konsoli. Nasz kod po prostu po cichu nie będzie działał.

Dlatego istnieje następująca zasada: twój kod powinien łapać tylko te wyjątki, z którymi wie, jak sobie poradzić. Jeśli wyjątek jest nieznany, to należy go przekazać dalej za pomocą throw. W tym przypadku wyżej złapie go ktoś bardziej poinformowany lub wyjątek zostanie wyrzucony jako błąd do konsoli.

Poprawmy nasz kod:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nieprawidłowy JSON produktu');
  } else if (error.name == 'ProductCostError') {
    alert('Produkt nie ma ceny lub ilości');
  } else {
    throw error; // przekazujemy wyjątek dalej
  }
}
Задание 1

Dany jest następujący kod:

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('skończyło się miejsce w pamięci');
  }
  
  if (error.name == 'SyntaxError') {
    alert('nieprawidłowy JSON');
  }
}

Co jest nie tak z tym kodem? Popraw go na bardziej udany.