Բացառությունների նետումը JavaScript-ում

Դիտարկենք JSON ապրանքի առաջադրանքի catch բլոկը:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('Անվավեր JSON ապրանք');
  } else if (error.name == 'ProductCostError') {
    alert('Ապրանքը չունի գին կամ քանակ');
  }
}

Ինչպես տեսնում եք, մենք բռնում ենք մեր կողմից նախատեսված երկու բացառություն և ինչ-որ կերպ արձագանքում դրան: Բայց ի՞նչ կլինի, եթե առաջանա մեր կողմից չնախատեսված մեկ այլ տիպի բացառություն: Այս դեպքում այն նույնպես կմտնի catch բլոկ, բայց դրա վրա ոչ մի արձագանք չի հաջորդի, քանի որ մեկ այլ տիպով բացառությունը պարզապես չի մտնի մեր if-երից որևէ մեկի մեջ:

Երբ ասում եմ, որ ոչ մի արձագանք չի լինի, նկատի ունեմ, որ իրականում ոչ մի: նույնիսկ սխալի կոնսոլում ցուցադրվելը չի լինի: Մեր կոդը պարզապես լռելյայն չի աշխատի:

Ուստի գոյություն ունի հետևյալ կանոնը. ձեր կոդը պետք է բռնի միայն այն բացառությունները, որոնցից գիտի, թե ինչպես դուրս գալ: Եթե բացառությունը անծանոթ է, ապա այն պետք է նետել հետագա օգտագործելով 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');
  }
}

Ի՞նչ է սխալ այս կոդում: Ուղղեք այն ավելի հաջող տարբերակով: