JavaScript-foute
Gooi, en probeer...Vang...Uiteindelik
Die try
stelling definieer 'n kodeblok om uit te voer (om te probeer).
Die catch
stelling definieer 'n kodeblok om enige fout te hanteer.
Die finally
stelling definieer 'n kodeblok om te hardloop, ongeag die resultaat.
Die throw
stelling definieer 'n pasgemaakte fout.
Foute sal gebeur!
Wanneer JavaScript-kode uitgevoer word, kan verskillende foute voorkom.
Foute kan koderingsfoute wees wat deur die programmeerder gemaak word, foute as gevolg van verkeerde invoer, en ander onvoorsienbare dinge.
Voorbeeld
In hierdie voorbeeld het ons "alert" verkeerd gespel as "adddler" om doelbewus 'n fout te produseer:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>
JavaScript vang addlert op as 'n fout, en voer die vangkode uit om dit te hanteer.
JavaScript probeer en vang
Die try
stelling laat jou toe om 'n blok kode te definieer wat vir foute getoets moet word terwyl dit uitgevoer word.
Die catch
stelling laat jou toe om 'n blok kode te definieer wat uitgevoer moet word, as 'n fout in die probeerblok voorkom.
Die JavaScript-stellings try
en catch
kom in pare:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
JavaScript gooi foute
Wanneer 'n fout voorkom, sal JavaScript normaalweg stop en 'n foutboodskap genereer.
Die tegniese term hiervoor is: JavaScript sal 'n uitsondering gooi (gooi 'n fout) .
JavaScript sal eintlik 'n Fout-objek met twee eienskappe skep: naam en boodskap .
Die gooi Verklaring
Die throw
stelling laat jou toe om 'n persoonlike fout te skep.
Tegnies kan jy 'n uitsondering gooi (gooi 'n fout) .
Die uitsondering kan 'n JavaScript String
, 'n Number
, 'n Boolean
of 'n Object
:
throw "Too big"; // throw a text
throw 500; // throw a number
As jy throw
saam met try
en
gebruik catch
, kan jy programvloei beheer en persoonlike foutboodskappe genereer.
Invoer validering voorbeeld
Hierdie voorbeeld ondersoek insette. As die waarde verkeerd is, word 'n uitsondering (fout) gegooi.
Die uitsondering (fout) word opgevang deur die catch-stelling en 'n pasgemaakte foutboodskap word vertoon:
<!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 == "") 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>
HTML-bekragtiging
Die kode hierbo is net 'n voorbeeld.
Moderne blaaiers sal dikwels 'n kombinasie van JavaScript en ingeboude HTML-bekragtiging gebruik, deur voorafbepaalde valideringsreëls te gebruik wat in HTML-kenmerke gedefinieer is:
<input id="demo" type="number" min="5" max="10" step="1">
Jy kan meer lees oor vormvalidering in 'n latere hoofstuk van hierdie tutoriaal.
Die uiteindelike Verklaring
Die finally
stelling laat jou kode uitvoer, na probeer en vang, ongeag die resultaat:
Sintaksis
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
}
Voorbeeld
function myFunction() {
const message =
document.getElementById("p01");
message.innerHTML = "";
let x =
document.getElementById("demo").value;
try {
if(x == "") 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 = "";
}
}
Die foutvoorwerp
JavaScript het 'n ingeboude foutobjek wat foutinligting verskaf wanneer 'n fout voorkom.
Die foutvoorwerp bied twee nuttige eienskappe: naam en boodskap.
Fout Object Eienskappe
Eiendom | Beskrywing |
---|---|
naam | Stel of gee 'n foutnaam terug |
boodskap | Stel of gee 'n foutboodskap ('n string) terug |
Foutnaamwaardes
Ses verskillende waardes kan deur die foutnaam-eienskap teruggestuur word:
Foutnaam | Beskrywing |
---|---|
EvalError | 'n Fout het in die eval()-funksie voorgekom |
RangeError | 'n Getal "buite omvang" het voorgekom |
Verwysingsfout | 'n Onwettige verwysing het plaasgevind |
Sintaksfout | 'n Sintaksfout het voorgekom |
TypeError | 'n Tipefout het voorgekom |
URIfout | 'n Fout in encodeURI() het voorgekom |
Die ses verskillende waardes word hieronder beskryf.
Eval fout
An EvalError
dui 'n fout in die eval() funksie aan.
Nuwer weergawes van JavaScript gooi nie EvalError nie. Gebruik eerder SyntaxError.
Reeksfout
A RangeError
word gegooi as jy 'n getal gebruik wat buite die omvang van wetlike waardes is.
Byvoorbeeld: Jy kan nie die aantal beduidende syfers van 'n getal op 500 stel nie.
Voorbeeld
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500
significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Verwysingsfout
A ReferenceError
word gegooi as jy (verwysing) 'n veranderlike gebruik wat nie verklaar is nie:
Voorbeeld
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Sintaksfout
A SyntaxError
word gegooi as jy probeer om kode met 'n sintaksfout te evalueer.
Voorbeeld
try {
eval("alert('Hello)"); //
Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Tik Fout
A TypeError
word gegooi as jy 'n waarde gebruik wat buite die reeks verwagte tipes is:
Voorbeeld
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number
to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
URI (Uniform Resource Identifier)-fout
A URIError
word gegooi as jy onwettige karakters in 'n URI-funksie gebruik:
Voorbeeld
try {
decodeURI("%%%"); // You cannot URI decode
percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Nie-standaard foutvoorwerpeienskappe
Mozilla en Microsoft definieer 'n paar nie-standaard fout voorwerp eienskappe:
lêernaam (Mozilla)
lynnommer (Mozilla)
kolomnommer (Mozilla)
stapel (Mozilla)
beskrywing (Microsoft)
nommer (Microsoft)
Moenie hierdie eiendomme op openbare webwerwe gebruik nie. Hulle sal nie in alle blaaiers werk nie.
Voltooi foutverwysing
Vir 'n volledige verwysing van die Fout-voorwerp, gaan na ons Volledige JavaScript-foutverwysing .