⊗jsSpExcPrb 150 of 294 menu

Viderekasting av unntak i JavaScript

La oss se på catch-blokken i JSON-produktoppgaven:

catch (error) { if (error.name == 'SyntaxError') { alert('Ugyldig JSON for produkt'); } else if (error.name == 'ProductCostError') { alert('Produktet mangler pris eller antall'); } }

Som du ser, fanger vi to unntak som vi har planlagt og reagerer på en måte på dem. Men hva skjer hvis det oppstår et uforutsett unntak av en annen type? I dette tilfellet vil det også havne i catch-blokken, men det vil ikke være noen reaksjon på dette, siden unntaket med en annen type rett og slett ikke vil treffe noen av våre if-setninger.

Når jeg sier at det ikke vil være noen reaksjon, mener jeg at det virkelig ikke blir noen: selv ikke noen feilmelding i konsollen. Koden vår vil rett og slett ikke fungere i stillhet.

Derfor finnes følgende regel: koden din skal bare fange de unntakene som den vet hvordan den skal håndtere. Hvis unntaket er ukjent, må det videresendes videre ved hjelp av throw. I dette tilfellet vil det bli fanget høyere opp av noen som er mer kjent med situasjonen, eller unntaket vil vises som en feil i konsollen.

La oss rette opp koden vår:

catch (error) { if (error.name == 'SyntaxError') { alert('Ugyldig JSON for produkt'); } else if (error.name == 'ProductCostError') { alert('Produktet mangler pris eller antall'); } else { throw error; // sender unntaket videre } }

Følgende kode er gitt:

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

Hva er galt med denne koden? Gjør den om til en bedre versjon.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis