⊗jsSpExcPrb 150 of 294 menu

Undantagskastning i JavaScript

Låt oss betrakta catch-blocket i uppgiften med JSON-produkt:

catch (error) { if (error.name == 'SyntaxError') { alert('Ogiltig JSON för produkten'); } else if (error.name == 'ProductCostError') { alert('Produkten saknar pris eller kvantitet'); } }

Som du ser, fångar vi två undantag som vi har planerat för och reagerar på något sätt. Men vad händer om ett oförutsett undantag av en annan typ uppstår? I det fallet kommer det också att hamna i catch-blocket, men ingen reaktion kommer att följa, eftersom undantaget med en annan typ helt enkelt inte kommer att träffa någon av våra if-satser.

När jag säger att det inte kommer att bli någon reaktion, menar jag att det verkligen inte blir någon: inte ens ett fel som skrivs ut till konsolen. Vår kod kommer helt enkelt att fortsätta utan att fungera.

Därför finns följande regel: din kod ska endast fånga de undantag som den vet hur den ska hantera. Om undantaget är okänt, måste det kastas vidare med hjälp av throw. I det fallet kommer någon med bättre koll att fånga det högre upp, eller så kommer undantaget att skrivas ut som ett fel i konsolen.

Låt oss rätta till vår kod:

catch (error) { if (error.name == 'SyntaxError') { alert('Ogiltig JSON för produkten'); } else if (error.name == 'ProductCostError') { alert('Produkten saknar pris eller kvantitet'); } else { throw error; // kastar undantaget vidare } }

Följande kod ges:

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('slut på utrymme i lagringen'); } if (error.name == 'SyntaxError') { alert('ogiltig JSON'); } }

Vad är fel med den här koden? Råtta den till en bättre version.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa