⊗jsSpExcPrb 150 of 294 menu

Videregivelse af undtagelser i JavaScript

Lad os overveje catch-blokken i opgaven med JSON-produktet:

catch (error) { if (error.name == 'SyntaxError') { alert('Ugyldig JSON for produktet'); } else if (error.name == 'ProductCostError') { alert('Produktet har ikke en pris eller mængde'); } }

Som du kan se, fanger vi to undtagelser, som vi har planlagt, og reagerer på en eller anden måde. Men hvad sker der, hvis der opstår en uforudset undtagelse af en anden type? I dette tilfælde vil den også falde i catch-blokken, men der vil ikke være nogen reaktion på det, da undtagelsen med en anden type simpelthen ikke vil falde ind under nogen af vores if-sætninger.

Når jeg siger, at der ikke vil være nogen reaktion, mener jeg, at der bogstaveligt talt ikke vil være nogen: der vil ikke engang være en fejl i konsollen. Vores kode vil simpelthen ikke fungere stille.

Derfor findes følgende regel: din kode bør kun fange de undtagelser, som den ved, hvordan den håndterer. Hvis undtagelsen er ukendt, skal den videregives videre ved hjælp af throw. I dette tilfælde vil den blive fanget højere oppe af en, der er bedre informeret, eller undtagelsen vil blive vist som en fejl i konsollen.

Lad os rette vores kode:

catch (error) { if (error.name == 'SyntaxError') { alert('Ugyldig JSON for produktet'); } else if (error.name == 'ProductCostError') { alert('Produktet har ikke en pris eller mængde'); } else { throw error; // videregiver undtagelsen videre } }

Følgende kode er givet:

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('pladsen i lageret er opbrugt'); } if (error.name == 'SyntaxError') { alert('ugyldig JSON'); } }

Hvad er der galt med denne kode? Ret den til en bedre version.

hyitiddaaz