kast
, og prøv...fang...til sidst
try
-sætningen definerer en kodeblok, der skal køres (for at prøve).
catch
-sætningen definerer en kodeblok til at håndtere enhver fejl.
finally
-sætningen definerer en kodeblok, der skal køres uanset resultatet.
throw
-sætningen definerer en tilpasset fejl.
Ved udførelse af JavaScript-kode kan forskellige fejl forekomme.
Fejl kan være kodefejl lavet af programmøren, fejl som skyldes forkert input og andre uforudsigelige ting.
I dette eksempel har vi stavet "alert" forkert som "adddler" for bevidst at producere en fejl:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Error Handling</h2>
<p>How to use <b>catch</b> to display an error.</p>
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
</body>
</html>
JavaScript fanger adddlert som en fejl og udfører fange kode til Håndter det.
try
...catch
try
-sætningen giver dig mulighed for at definere en kodeblok, der skal være testet for fejl, mens den udføres.
catch
-sætningen giver dig mulighed for at definere en kodeblok til udføres, hvis der opstår en fejl i prøveblokken.
JavaScript-sætningerne try
og catch
komme i par:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
Når der opstår en fejl, vil JavaScript normalt stoppe og generere en fejlmeddelelse.
Den tekniske term for dette er: JavaScript vil kaste en undtagelse (smid en fejl).
JavaScript vil faktisk oprette et Fejlobjekt med to egenskaber: navn og besked.
kast
-erklæringenthrow
-sætningen giver dig mulighed for at oprette en brugerdefineret fejl.
Teknisk set kan du smide en undtagelse (smid en fejl).
Undtagelsen kan være en JavaScript streng
, et nummer
, et Boolean
eller et objekt
:
throw "Too big"; // throw a text
throw 500; // throw a number
Hvis du bruger kast
sammen med try
og fangst
, du kan styre programmet flow og generere brugerdefinerede fejlmeddelelser.
Dette eksempel undersøger input. Hvis værdien er forkert, en undtagelse (err) kastes.
Undtagelsen (err) fanges af catch-sætningen, og en brugerdefineret fejlmeddelelse vises:
<!DOCTYPE html>
<html>
<body>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button"
onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw
"too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>
</body>
</html>
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw "too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
</script>
</body>
</html>
Koden ovenfor er kun et eksempel.
Moderne browsere vil ofte bruge en kombination af JavaScript og indbygget HTML validering ved hjælp af foruddefinerede valideringsregler defineret i HTML-attributter:
<input id="demo" type="number" min="5" max="10" step="1">
Du kan læse mere om formularvalidering i et senere kapitel i denne øvelse.
endelig
-erklæringenfinally
-sætningen lader dig udføre kode, efter at have prøvet og fangst, uanset resultatet:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "is empty";
if(isNaN(x))
throw "is not a number";
x = Number(x);
if(x >
10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err)
{
message.innerHTML = "Error: " +
err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript try catch</h2>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>
<script>
function myFunction() {
const message = document.getElementById("p01");
message.innerHTML = "";
let x = document.getElementById("demo").value;
try {
if(x.trim() == "") throw "is empty";
if(isNaN(x)) throw "is not a number";
x = Number(x);
if(x > 10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err) {
message.innerHTML = "Input " + err;
}
finally {
document.getElementById("demo").value = "";
}
}
</script>
</body>
</html>
JavaScript har et indbygget fejlobjekt, der giver fejlinformation når der opstår en fejl.
Fejlobjektet giver to nyttige egenskaber: navn og meddelelse.
Indstiller eller returnerer et fejlnavn
Indstiller eller returnerer en fejlmeddelelse (en streng)
Seks forskellige værdier kan returneres af egenskaben fejlnavn:
Der er opstået en fejl i eval()-funktionen
Et tal "uden for rækkevidde" er opstået
Der er opstået en ulovlig reference
Der er opstået en syntaksfejl
Der er opstået en typefejl
En fejl i encodeURI() er opstået
De seks forskellige værdier er beskrevet nedenfor.
En EvalError
indikerer en fejl i eval()-funktionen.
Nyere versioner af JavaScript kaster ikke EvalError. Brug SyntaxError i stedet.
En RangeError
vises, hvis du bruger et tal, der er uden for rækken af juridiske værdier.
For eksempel: Du kan ikke indstille antallet af signifikante cifre i et tal til 500.
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot set the number of significant digits of a number to 500:</p>
<p id="demo">
<script>
let num = 1;
try {
num.toPrecision(500);
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
En ReferenceError
vises, hvis du bruger (reference) en variabel der ikke er deklareret:
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot use the value of a non-existing variable:</p>
<p id="demo"></p>
<script>
let x = 5;
try {
x = y + 1;
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
En SyntaxError
vises, hvis du forsøger at evaluere kode med en syntaks fejl.
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot evaluate code that contains a syntax error:</p>
<p id="demo"></p>
<script>
try {
eval("alert('Hello)");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
En TypeError
vises, hvis du bruger en værdi, der er uden for række forventede typer:
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>You cannot convert a number to upper case:</p>
<p id="demo"></p>
<script>
let num = 1;
try {
num.toUpperCase();
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
En URIERror
fremkommer, hvis du bruger ulovlige tegn i en URI-funktion:
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Prøv det selv →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Errors</h2>
<p>Some characters cannot be decoded with decodeURI():</p>
<p id="demo"></p>
<script>
try {
decodeURI("%%%");
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
</script>
</body>
</html>
Mozilla og Microsoft definerer nogle ikke-standard fejlobjektegenskaber:
fileName (Mozilla) lineNumber (Mozilla) columnNumber (Mozilla) stack (Mozilla) description (Microsoft) number (Microsoft)
Brug ikke disse egenskaber på offentlige websteder. De vil ikke fungere i alle browsere.
For en fuldstændig reference til Error-objektet, gå til vores Complete JavaScript-fejlreference.