heittää ja kokeile...saappaa...vihdointry-käsky määrittää suoritettavan (yritettävän) koodilohkon.
catch-käsky määrittää koodilohkon, joka käsittelee virheitä.
lopulta-käsky määrittää koodilohkon, joka suoritetaan tuloksesta riippumatta.
throw-lause määrittää mukautetun virheen.
JavaScript-koodia suoritettaessa voi tapahtua erilaisia virheitä esiintyä.
Virheet voivat olla ohjelmoijan tekemiä koodausvirheitä tai virheistä johtuvia virheitä syötteitä ja muita odottamattomia asioita.
Tässä esimerkissä kirjoitimme väärin sanan "varoitus" muodossa "adddlert" tuottaaksemme tarkoituksella virheen:
<p id="demo"></p>
<script>
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
</script>Kokeile itse →
<!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 havaitsee adddlertin virheeksi ja suorittaa sen saaliskoodi käsittele sitä.
try ... catch
try-käskyn avulla voit määrittää koodilohkon testataan virheiden varalta, kun sitä suoritetaan.
catch-käskyn avulla voit määrittää koodilohkon suoritetaan, jos try-lohkossa tapahtuu virhe.
JavaScript-lauseet yrittää ja saattaa tule pareittain:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}Kun virhe tapahtuu, JavaScript tekee sen normaalisti pysähtyy ja tuottaa virheilmoituksen.
Tekninen termi tälle on: JavaScript heittää an poikkeus (heita virhe).
JavaScript luo itse asiassa Virheobjektin, jossa on kaksi ominaisuutta: nimi ja viesti.
heitto-lausuntothrow-käskyn avulla voit luoda mukautetun virheen.
Teknisesti voit heittää poikkeuksen (heittää virheen).
Poikkeus voi olla JavaScript merkkijono, numero, Boolean tai objekti:
throw "Too big"; // throw a text
throw 500; // throw a numberJos käytät heittä- ja kokeile- ja saappaa, voit hallita ohjelmaa virtaa ja luoda mukautettuja virheilmoituksia.
Tämä esimerkki tarkastelee syötettä. Jos arvo on väärä, poikkeus (err) heitetään.
Catch-lause havaitsee poikkeuksen (err), ja näyttöön tulee mukautettu virheviesti:
<!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>Kokeile itse →
<!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>
Yllä oleva koodi on vain esimerkki.
Nykyaikaiset selaimet käyttävät usein JavaScriptin ja sisäänrakennetun HTML:n yhdistelmää validointi käyttämällä ennalta määritettyjä vahvistussääntöjä, jotka on määritetty HTML-attribuuteissa:
<input id="demo" type="number" min="5" max="10" step="1">Voit lukea lisää lomakkeiden validoinnista tämän opetusohjelman myöhemmässä luvussa.
lopultalopulta-käskyn avulla voit suorittaa koodin, kun olet yrittänyt ja saalis tuloksesta riippumatta:
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 = "";
}
}Kokeile itse →
<!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>
JavaScriptissä on sisäänrakennettu virheobjekti, joka antaa virhetiedot milloin tapahtuu virhe.
Virheobjekti tarjoaa kaksi hyödyllistä ominaisuutta: nimi ja viesti.
Asettaa tai palauttaa virheen nimen
Asettaa tai palauttaa virheilmoituksen (merkkijonon)
Virhenimi-ominaisuuden avulla voidaan palauttaa kuusi eri arvoa:
Eval()-funktiossa on tapahtunut virhe
Numero "alueen ulkopuolella" on tapahtunut
Laiton viittaus on tapahtunut
Tapahtui syntaksivirhe
Tapahtui tyyppivirhe
Virhe encodeURI():ssa
Kuusi eri arvoa kuvataan alla.
EvalError osoittaa virheen eval()-funktiossa.
JavaScriptin uudemmat versiot eivät tuota EvalErroria. Käytä sen sijaan SyntaxErroria.
RangeError annetaan, jos käytät numeroa, joka on ulkopuolella juridisten arvojen vaihteluväli.
Esimerkiksi: Et voi asettaa luvun merkitsevien numeroiden määrää arvoon 500.
let num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Kokeile itse →
<!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>
ReferenceError heitetään, jos käytät (viittausta) muuttujaa jota ei ole ilmoitettu:
let x = 5;
try {
x = y + 1; // y cannot be used (referenced)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Kokeile itse →
<!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>
SyntaxError heitetään, jos yrität arvioida koodia syntaksivirhe.
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
} Kokeile itse →
<!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>
TypeError heitetään, jos käytät arvoa, joka ei ole valikoima odotettuja tyyppejä:
let num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Kokeile itse →
<!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>
URIerror annetaan, jos käytät laittomia merkkejä URI-funktiossa:
try {
decodeURI("%%%"); // You cannot URI decode percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}Kokeile itse →
<!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 ja Microsoft määrittävät joitain epätyypillisiä virheobjektin ominaisuuksia:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)Älä käytä näitä ominaisuuksia julkisilla verkkosivuilla. Ne eivät toimi kaikissa selaimissa.
Täydellisen Error-objektin viittauksen löydät kohdasta Complete JavaScript-virheen viite.