⊗jsSpExcPrb 150 of 294 menu

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

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

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

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

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

Ուստի գոյություն ունի հետևյալ կանոնը. ձեր կոդը պետք է բռնի միայն այն բացառությունները, որոնցից գիտի, թե ինչպես դուրս գալ: Եթե բացառությունը անծանոթ է, ապա այն պետք է նետել հետագա օգտագործելով throw: Այս դեպքում այն կբռնի ինչ-որ մեկը, ով ավելի տեղեկացված է, կամ բացառությունը կցուցադրվի որպես սխալ կոնսոլում:

Եկեք ուղղենք մեր կոդը:

catch (error) { if (error.name == 'SyntaxError') { alert('Անվավեր JSON ապրանք'); } else if (error.name == 'ProductCostError') { alert('Ապրանքը չունի գին կամ քանակ'); } else { throw error; // նետում ենք բացառությունը հաջորդին } }

Տրված է հետևյալ կոդը:

try { 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'); } }

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

plenkkmspt