JavaScript Fel - Throw och Try to Catch
- Föregående sida JS-operators prioritet
- Nästa sida JS-omfattning
try
Satsen gör det möjligt för dig att testa fel i kodblocket.
catch
Satsen tillåter dig att hantera fel.
throw
satsen tillåter dig att skapa anpassade fel.
finally
Låter dig köra kod, efter try och catch, oavsett resultat.
Fel kommer alltid att inträffa!
När JavaScript-kod körs inträffar olika typer av fel.
Ett fel kan vara en kodningsfel av utvecklaren, ett fel orsakat av felaktig inmatning eller på grund av andra oförutsedda problem.
Exempel
I detta exempel använder vi adddlert
Skriv en varningskod för att medvetet skapa ett fel:
<p id="demo"></p> <script> try { adddlert("Välkommen att besöka!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript fångar adddlert som ett fel och utför kod för att hantera felet.
JavaScript try och catch
try
Satsen tillåter dig att definiera ett kodblock för att under körning detektera fel.
catch
Satsen tillåter dig att definiera ett kodblock som ska köras, om ett fel inträffar i en try-kodblock.
JavaScript-satser try
och catch
Parvis:
try { Kodblock för testning } catch(err) { Kodblock för felhantering }
JavaScript kastar ett fel
När ett fel inträffar, stoppar JavaScript vanligtvis och genererar ett felmeddelande.
Tekniska termer beskrivs på detta sätt:JavaScript kastar undantag (kasta fel)。
JavaScript skapar faktiskt undantag med två egenskaper: Error objekt:name
och message
。
throw-satsen
throw
satsen tillåter dig att skapa anpassade fel.
Tekniskt sett kan duKasta undantag (kasta fel)。
Undantag kan vara JavaScript-sträng, nummer, boolean eller objekt:
throw "För stort"; // kasta text throw 500; // kasta nummer
om throw
och try
och catch
Samtidigt användande kan styra programflödet och generera anpassade felmeddelanden.
Inmatningsvalideringsfall
Detta exempel kommer att kontrollera inmatningen. Om värdet är felaktigt, kommer ett undantag (err) att kastas.
Denna undantag (err) fångas av catch-satsen och visar ett anpassat felmeddelande:
<!DOCTYPE html> <html> <body> <p>Ange ett nummer mellan 5 och 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Testa inmatning</button> <p id="message"></p> <script> function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "tom"; if(isNaN(x)) throw "inte ett tal"; x = Number(x); if(x < 5) throw "för litet"; if(x > 10) throw "för stort"; } catch(err) { message.innerHTML = "Input är " + err; } } </script> </body> </html>
HTML-validering
Ovanstående kod är bara ett exempel.
Modernt webbläsare sammankopplar ofta JavaScript med inbyggd HTML-validering genom att använda fördefinierade valideringsregler definierade i HTML-attributen:
<input id="demo" type="number" min="5" max="10" step="1">
Du kommer att lära dig mer om formulärvalidering i en senare avsnitt i denna handledning.
finally-satsen
finally
En mening tillåter dig att köra kod efter try och catch, oavsett resultat:
try { // Koden för testning } catch(err) { // Koden för att hantera fel } finally { // Koden som alltid körs oavsett resultat }
Exempel
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "är tomt"; if(isNaN(x)) throw "inte ett tal"; x = Number(x); if(x > 10) throw "för stort"; if(x < 5) throw "för litet"; } catch(err) { message.innerHTML = "Fel: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Error objekt
JavaScript har ett inbyggt error -objekt som tillhandahåller felinformation när ett fel inträffar.
error -objektet tillhandahåller två användbara egenskaper:name
och message
。
Error objekt egenskaper
egenskap | Beskrivning |
---|---|
name | Ställ in eller returnera felnamn |
message | Ställ in eller returnera felmeddelande (en sträng) |
Error Name Values
error -objektets name -egenskap kan returnera sex olika värden:
Felnamn | Beskrivning |
---|---|
EvalError | Fel som har inträffat i eval() -funktionen |
RangeError | Fel har inträffat utanför numerisk räckvidd |
ReferenceError | Olaglig hänvisning har inträffat |
SyntaxError | Syntaksfel har inträffat |
TypeError | Typerror har inträffat |
URIError | Fel som har inträffat i encodeURI() |
Nedan förklarar vi de sex olika värdena.
Eval fel
EvalError
indikationer på fel i eval() -funktionen.
Uppdaterade versioner av JavaScript kommer inte att kasta några EvalError
。Använd SyntaxError
ersätt.
Rangefel
RangeError
kommer att kastas ut när du använder ett tal utanför det giltiga värdeområdet.
Till exempel: Du kan inte ställa in 500 siffror för ett tal.
Exempel
var num = 1; try { num.toPrecision(500); // Ett tal kan inte ha 500 giltiga siffror } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Hänvisningsfel
Om du använder (hänvisar till) en inte deklarerad variabel, då ReferenceError
kommer att kastas ut:
Exempel
var x; try { x = y + 1; // y kan inte hänvisas till (användas) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Syntaksfel
Om du räknar kod med syntaxfel, kommer SyntaxError
kastas ut:
Exempel
try { eval("alert('Hello)"); // Brist på ' kommer att orsaka fel } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Typerror
Om det värde du använder inte ligger inom förväntat värdeområde, då TypeError
kastas ut:
Exempel
var num = 1; try { num.toUpperCase(); // Du kan inte konvertera numret till stor bokstav } catch(err) { document.getElementById("demo").innerHTML = err.name; }
URI-fel
Om du använder ogiltiga tecken i URI-funktionen, då URIError
kastas ut:
Exempel
try { decodeURI("%%%"); // Du kan inte URI-koda dessa procenttecken } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Icke-standard Error-objekt-attribut
Mozilla och Microsoft har definierat icke-standard error-objekt-attribut:
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
Använd inte dessa egenskaper på offentliga webbplatser. De fungerar inte i alla webbläsare.
- Föregående sida JS-operators prioritet
- Nästa sida JS-omfattning