Пракід выключэнняў у JavaScript

Разгледзім блок catch задачы з JSON прадукту:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Некарэктны JSON прадукту');
  } else if (error.name == 'ProductCostError') {
    alert('У прадукту адсутнічае цана або колькасць');
  }
}

Як вы бачыце, мы лавім два запланаваныя намі выключэнні і як-то рэагуем на гэта. Але што будзе, калі ўзнікне не прадугледжанае намі выключэнне іншага тыпу? У гэтым выпадку яно таксама трапіць у блок catch, але ніякай рэакцыі на гэта не адбудзецца, так як выключэнне з іншым тыпам проста не трапіць ні ў адзін з нашых іфаў.

Калі я кажу, што не будзе ніякай рэакцыі, то маю на ўвазе, што рэальна ніякай: нават не будзе вываду памылкі ў кансоль. Наш код проста маўчкі не будзе працаваць.

Таму існуе наступнае правіла: ваш код павінен лавіць толькі тыя выключэнні, з якімі ведае, як справіцца. Калі выключэнне невядомае, то яго трэба пракінуць далей з дапамогай throw. У гэтым выпадку вышэй яго зловіць хто-то больш асведчаны альбо выключэнне вываліцца памылкай у кансоль.

Давайце паправім наш код:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Некарэктны JSON прадукту');
  } else if (error.name == 'ProductCostError') {
    alert('У прадукту адсутнічае цана або колькасць');
  } else {
    throw error; // пракідваем выключэнне далей
  }
}
Задание 1

Дадзены наступны код:

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('скончылася месца ў сховішчы');
  }
  
  if (error.name == 'SyntaxError') {
    alert('некарэктны JSON');
  }
}

Што не так з гэтым кодам? Выпраўце яго на больш удалы.