JavaScript virheet - Throw ja Try to Catch
- Edellinen sivu JS operaattorin prioriteetti
- Seuraava sivu JS-ala-alue
try
Lause mahdollistaa koodikappaleen virheiden testaamisen.
catch
Lause sallii sinun käsitellä virheitä.
heittää
Lause sallii mukautetun virheen luomisen.
finally
Se mahdollistaa koodin suorittamisen, try ja catch jälkeen, riippumatta tuloksesta.
Virheet tapahtuvat aina!
JavaScript-koodin suorittamisen aikana tapahtuu monenlaisia virheitä.
Virheet voivat olla ohjelmistokehittäjän koodausvirheet, virheelliset syötteet aiheuttamat virheet tai muut ennustamattomat ongelmat.
Esimerkki
Tässä esimerkissä me adddlert
Kirjoita varoituskoodi tahallaan aiheuttaaksesi virheen:
<p id="demo"></p> <script> try { adddlert("Tervetuloa sivustolle!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript kutsuu adddlert virheeksi ja suorittaa koodia virheen käsittelyyn.
JavaScript try ja catch
try
Lause sallii sinun määritellä koodikappaleen, jotta voit havaita virheet suoritettaessa.
catch
Lause sallii sinun määritellä suoritettavan koodikappaleen, jos try-koodikappaleessa tapahtuu virhe.
JavaScript lauseet try
ja catch
Tuplaparina:
try { Testausta varten oleva koodikappale } catch(err) { Virheen käsittelyn koodikappale }
JavaScript heittää virheen
Virheen tapahtuessa JavaScript keskeyttää ja näyttää virheilmoituksen.
Tekninen termi kuvaa sitä seuraavasti:JavaScript heittää poikkeuksen (heittää virheen)。
JavaScript luo todellisuudessa poikkeuksen (heittää virheen) kaksi ominaisuutta sisältävän Error objekti:name
ja message
。
Heittää-lause
heittää
Lause sallii mukautetun virheen luomisen.
Teknisesti voitHeittää poikkeus (heittää virheen)。
Poikkeukset voivat olla JavaScript-merkkijono, numero, totuusarvo tai objekti:
heittää "Liian suuri"; // Heittää tekstin heittää 500; // Heittää numeron
Jos heittää heittää
ja try
ja catch
Käytettynä yhdessä ne voivat ohjata ohjelman suoritusvirtaa ja luoda mukautettuja virheilmoituksia.
Syötteen vahvistus
Tässä esimerkissä tarkistetaan syötettä. Jos arvo on virheellinen, heitetään poikkeus (err).
Tämä poikkeus (err) otetaan catch-lauseen vastaan ja näytetään mukautettu virheilmoitus:
<!DOCTYPE html> <html> <body> <p>Syötä numero 5-10 väliltä:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Testaa syötettä</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 "Tyhjä"; if(isNaN(x)) throw "ei ole numero"; x = Number(x); if(x < 5) throw "Liian pieni"; if(x > 10) throw "Liian suuri"; } catch(err) { message.innerHTML = "Syöte on " + err; } } </script> </body> </html>
HTML-vahvistus
Tämä koodi on vain esimerkki.
Nykyiset selaimet yhdistävät yleensä JavaScriptin ja sisäänrakennetun HTML-vahvistuksen käyttämällä HTML-ominaisuuksissa määriteltyjä ennakkotarkistuslakeja:
<input id="demo" type="number" min="5" max="10" step="1">
Opit lisää lomakkeen vahvistuksesta tämän opetusohjelman myöhemmiltä luvuista.
finally-lause
finally
Lause sallii koodin suorittamisen try ja catch jälkeen, riippumatta tuloksesta:
try { // Testikäyttöön tarkoitettu koodikappale } catch(err) { // Virheen käsittelyn koodikappale } finally { // Suoritetaan aina, riippumatta tuloksesta }
Esimerkki
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "tyhjä"; if(isNaN(x)) throw "ei ole numero"; x = Number(x); if(x > 10) throw "liian suuri"; if(x < 5) throw "liian pieni"; } catch(err) { message.innerHTML = "Virhe:" + err + "."; } finally { document.getElementById("demo").value = ""; } }
Error objekti
JavaScriptillä on sisäänrakennettu error -objekti, joka tarjoaa virheilmoituksia virheiden tapahtuessa.
error -objekti tarjoaa kaksi hyödyllistä ominaisuutta:name
ja message
。
Error objektin ominaisuudet
ominaisuus | kuvaus |
---|---|
name | Aseta tai palauta virhenimi |
message | Aseta tai palauta virheilmoitus (yksi merkkijono) |
Error Name Values
error -objektin name -ominaisuus voi palauttaa kuusi erilaista arvoa:
virhenimi | kuvaus |
---|---|
EvalError | virhe on tapahtunut eval() -funktiossa |
RangeError | virhe ylittää numeron alueen |
ReferenceError | virheellinen viittaus on tapahtunut |
SyntaxError | syntaxisvirhe on tapahtunut |
TypeError | tyyppivirhe on tapahtunut |
URIError | encodeURI() -toiminnossa tapahtunut virhe |
Seuraavaksi selitän nämä kuusi erilaista arvoa yksityiskohtaisesti.
Eval virhe
EvalError
virheitä eval() -funktiosta.
päivitetyn JavaScriptin versio ei heitä mitään EvalError
。Käytä SyntaxError
korvaa.
aluevirhe
RangeError
Virhe heitetään, kun käytät lukuja, joilla ei ole laillista arvojen aluetta.
Esimerkiksi:Et voi asettaa luvun tarkkuutta 500.
Esimerkki
var num = 1; try { num.toPrecision(500); // Luku ei voi olla 500有效数字 } catch(err) { document.getElementById("demo").innerHTML = err.name; }
viittausvirhe
Jos käytät (viitatat) määrittelemätöntä muuttujaa, ReferenceError
virhe heitetään:
Esimerkki
var x; try { x = y + 1; // y ei voi olla viitattavissa (käytettävissä) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
syntaxisvirhe
Jos laskutat virheellistä koodia, SyntaxError
Heitetään virhe:
Esimerkki
try { eval("alert('Hello)"); // Puuttuva ' aiheuttaa virheen } catch(err) { document.getElementById("demo").innerHTML = err.name; }
tyyppivirhe
Jos käytämäsi arvo ei ole odotetun arvojen alueella, TypeError
Heitetään virhe:
Esimerkki
var num = 1; try { num.toUpperCase(); // Et voi muuntaa numeroa isoksi } catch(err) { document.getElementById("demo").innerHTML = err.name; }
URI-virhe
Jos käytät URI-funktiota laittomien merkkien kanssa, URIError
Heitetään virhe:
Esimerkki
try { decodeURI("%%%"); // Et voi koodata näitä prosenttimerkkejä URI:lle } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Epästandardit Error-objektin ominaisuudet
Mozilla ja Microsoft ovat määrittäneet epästandardit error-objektin ominaisuudet:
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
Älä käytä näitä ominaisuuksia julkisilla verkkosivustoilla. Ne eivät toimi kaikissa selaimissa.
- Edellinen sivu JS operaattorin prioriteetti
- Seuraava sivu JS-ala-alue