Kivételek továbbdobása JavaScriptben

Vizsgáljuk meg a JSON termék feladat catch blokkját:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Hibás JSON termék');
  } else if (error.name == 'ProductCostError') {
    alert('A terméknek nincs ára vagy mennyisége');
  }
}

Amint látható, elkapunk két általunk tervezett kivételt és valahogy reagálunk rájuk. De mi történik, ha egy általunk nem előzhető, más típusú kivétel merül fel? Ebben az esetben az is belép a catch blokkba, de erre nem következik be semmilyen reakció, mivel a más típusú kivétel egyszerűen nem kerül be egyik if águnkba sem.

Amikor azt mondom, hogy nem lesz semmilyen reakció, akkor azt értem, hogy tényleg semmi: még hiba sem jelenik meg a konzolon. A kódunk egyszerűen csendesen nem fog működni.

Ezért létezik a következő szabály: a kódodnak csak azokat a kivételeket kapja el, amelyekkel tudja, hogyan bánjon. Ha a kivétel ismeretlen, akkor azt tovább kell dobni a throw segítségével. Ebben az esetben feljebb valaki jobban informált elkapja, vagy a kivétel hibaként megjelenik a konzolon.

Javítsuk a kódunkat:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Hibás JSON termék');
  } else if (error.name == 'ProductCostError') {
    alert('A terméknek nincs ára vagy mennyisége');
  } else {
    throw error; // továbbdobjuk a kivételt
  }
}
Задание 1

Adott a következő 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('elfogyott a hely a tárolóban');
  }
  
  if (error.name == 'SyntaxError') {
    alert('hibás JSON');
  }
}

Mi a baj ezzel a kóddal? Javítsa ki egy megfelelőbb verzióra.