⊗jsSpExcPrb 150 of 294 menu

Прехвърляне на изключения в JavaScript

Разгледайте блока catch на задачата с JSON продукт:

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

Какво не е наред с този код? Поправете го на по-удачен.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне