Prosleđivanje izuzetaka u JavaScript-u

Razmotrimo blok catch zadatka sa JSON proizvoda:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nekorektan JSON proizvoda');
  } else if (error.name == 'ProductCostError') {
    alert('Proizvodu nedostaje cena ili količina');
  }
}

Kao što vidite, hvatamo dva od nas planirana izuzetka i na neki način reagujemo na to. Ali šta će se desiti ako se pojavi nepredviđeno izuzetak drugog tipa? U tom slučaju on će takođe upasti u blok catch, ali nikakva reakcija na to neće uslediti, jer izuzetak drugog tipa jednostavno neće upasti ni u jedan od naših if-ova.

Kada kažem da neće biti nikakve reakcije, mislim da stvarno nikakve: čak neće biti ni ispisivanja greške u konzolu. Naš kod će jednostavno ćutati i neće raditi.

Zato postoji sledeće pravilo: vaš kod treba da hvata samo one izuzetke sa kojima zna kako da se izbori. Ako je izuzetak nepoznat, onda ga treba proslediti dalje pomoću throw. U tom slučaju iznad će ga uhvatiti neko bolje upućen ili će se izuzetak ispisati kao greška u konzolu.

Hajde da ispravimo naš kod:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Nekorektan JSON proizvoda');
  } else if (error.name == 'ProductCostError') {
    alert('Proizvodu nedostaje cena ili količina');
  } else {
    throw error; // prosleđujemo izuzetak dalje
  }
}
Задание 1

Dat je sledeći 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('ponestalo je mesta u skladištu');
  }
  
  if (error.name == 'SyntaxError') {
    alert('nekorektan JSON');
  }
}

Šta nije u redu sa ovim kodom? Ispravite ga na bolju verziju.