Прослеђивање изузетака у 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');
  }
}

Шта није у реду са овим кодом? Исправите га на успешнији.