Programmeerimisvead on vältimatud. Varem või hiljem kogeb teie rakendus ootamatut käitumist. Nagu iga teine programmeerimiskeel, tekitab JavaScript vigu, kui teie koodis läheb midagi valesti.
Vead häirivad rakenduse normaalset voogu. Kuid need aitavad kaitsta teie rakendust ettearvamatu käitumise eest. Väga oluline on teadmine, kuidas vigu õigesti käsitleda.
Miks on vigade käsitlemine oluline?
Vigade käsitlemine aitab kaasa paremale kasutajakogemusele. Saate asendada JavaScripti vaike- ja mõnikord paljusõnalised vead inimesele loetavamate veateadetega. Saate osade tõrgete põhjustega graatsiliselt hakkama ja saate oma programmi töös hoida, selle asemel et see sulgeda.
Vigade käsitlemine on abiks ka arenduse ajal. Saate tabada käitusaja vea ja teha sellega midagi kasulikku, näiteks logige see brauseri konsooli. See on graatsilisem kui viga, mis põhjustab krahhi ja ei tea, kus või miks viga ilmnes.
JavaScripti sisseehitatud vigade struktuur
JavaScripti vead on kolme omadusega objektid:
- nimi: See on vea nimi. Näiteks ilmub puuduv muutuja nimi veateate nimega SyntaxError.
- sõnum: See on sõnumi sisu ja selgitab viga tekstiliselt.
- põhjus: saate seda atribuuti kasutada kohandatud vigadega, et jälgida kõnevirnu.
JavaScripti levinumad veatüübid
Siin on mõned JavaScriptis leitud tavalised vead.
Süntaksiviga
Kui JavaScript proovib teie koodi tõlgendada, võivad ilmneda süntaksivead. Kui teie kood ei vasta õigele süntaksile, kuvatakse tõrketeade. Mõned levinumad vead, mis võivad süntaksivigu esile kutsuda, on järgmised:
- Muutujate nimed puuduvad.
- Funktsiooni järel puudub "}".
- Tingimuse järel puudub ")".
Viiteviga
Viitevead ilmnevad siis, kui programm proovib seda teha viidata muutujale mis pole saadaval või väljaspool rakendust.
Tüübiviga
JavaScript võib tekitada tüübivea, kui ta ei saa toimingut sooritada, kuna tüüp, mida ta ootab, erineb saadud tüübist.
URIEviga
See tõrge ilmneb siis, kui kasutate globaalset URI-haldusfunktsiooni (nt decodeURIComponent()) valesti. Selle tulemusena kodeerimine või dekodeerimine ebaõnnestub.
AggregateError
Seda viga kasutatakse mitme ühe pakitud vea tähistamiseks. Kasutage seda, kui soovite korraga palju vigu tekitada. Näiteks võib Promise.any() visata välja AggregateError(), kui kõik talle antud lubadused lükatakse tagasi.
Sisemine viga
Kui JavaScripti mootoris ilmneb tõrge, kuvatakse sisemine tõrge.
RangeError
Mõned funktsioonid dikteerivad väärtuste vahemiku, mida saate argumentidena edastada. See tõrge ilmneb siis, kui proovite edastada väärtust, mis sellesse vahemikku ei kuulu.
Vigade käsitlemine prooviga... Püüa plokk
JavaScript pakub koos sisseehitatud erandite käsitlemise funktsiooni proovi… püüda… lõpuks blokk. Samuti võimaldab see tõstatada oma vead, kasutades viskama operaator.
Käitusajal tekkivate vigade käsitlemiseks võite kasutada plokki try…catch. Kirjutate prooviplokki kehtiva koodi, mida loodate õigesti käivitada. Püügiplokki saate kirjutada veakäsitluse koodi.
proovi {
// Kehtiv Javascripti kood
} püüda (viga) {
// Käsitsemisviga
} lõpuks {
// Käivitatakse isegi vea ilmnemisel
}
Püügiplokki ignoreeritakse, kui prooviplokis olev kood vigu ei tekita. Kui see tekitab vea, hüppab täitmine püüdmisplokki. Viimases plokis olev kood jookseb olenemata sellest, kas viga ilmneb või mitte. See plokk ei ole kohustuslik, seega jätke see välja, kui te seda ei vaja.
Prooviblokki lisatud kood peab olema kehtiv. Kui see pole nii, annab JavaScript parsimise vea.
Vaatame praktilist näidet:
proovi {
konsool.log (tekst)
} püüda (viga) {
konsool.log(viga.sõnum)
} lõpuks {
console.log("Hukatakse sellest hoolimata")
}
See programm proovib logida tekstimuutuja väärtust. Kuna see muutuja pole määratletud, annab programm vea. See tõrge prinditakse konsoolile püüdmisplokki. Seejärel käivitub viimane plokk ja prindib oma sõnumi.
Viiteviga: tekst pole määratletud
Hukatakse sellest hoolimata
Olukordades, kus peate oma vea ise esile tõstma, kasutage viskama operaator.
Mõelge sellele näitele, mis annab valeandmete korral vea:
konst andmed = getData()
proovi {
if (!andmed) {
viskama "Andmed puuduvad"
}
konsool.log (andmed)
// jätka
} püüda(viga) {
konsool.log (viga) // "Andmed puuduvad"
}
Selles näites kutsub programm välja funktsiooni getData() ja määrab selle tulemuse andmemuutujale. Prooviplokis väljastab plokk kohandatud vea, kui andmed on tühjad. Püügiplokk tabab selle vea ja logib selle konsooli.
Vigade viskamine on arenduse käigus väga kasulik. Saate kasutada kohandatud veateadet, et mõista, miks teie rakendus ei tööta ootuspäraselt.
Nagu see näide näitab, saate veaobjekti jaoks kasutada stringi. Tegelikult saate veana visata mis tahes JavaScripti avaldise. Sisseehitatud vigadega järjepidevuse huvides kasutage aga nime ja sõnumit sisaldavat JavaScripti objekti.
viskama {
nimi: "Vea nimi",
sõnum: "Veateade"
}
Vigade viskamisel saate kasutada ka JavaScripti sisseehitatud konstruktoreid. Nende konstruktorite hulka kuuluvad muu hulgas Error, SyntaxError ja ReferenceError.
Vea esitamiseks veakonstruktori abil kasutage seda koodi:
viskamauusViga("Andmed puuduvad")
Nüüd saate viidata nimele ja sõnumile.
konsool.log (error.name) // Viga
konsool.log (error.message) // Andmed puuduvad
JavaScripti veaobjekti laiendamine
Kohandatud veaklass on kasulik selliste vigade käsitlemisel, mis ei vasta JavaScripti juba pakutavatele objektidele. Näiteks võite soovida eraldada andmete valideerimise vea konkreetse tüübina nimega ValidationError.
Võite kasutada a JavaScript ES2015 klass kohandatud veaklassi loomiseks.
klassValideerimisvigaulatubViga{
konstruktor(sõnum) {
Super(sõnum);
see.nimi = "Valideerimisviga";
}
}
Tehke tõrge klassi ValidationError abil järgmiselt:
viskamauus ValidationError ("Teie veateade")
Visatud viga on objekt nime ja sõnumi väärtustega.
{
nimi: "Valideerimisviga",
sõnum: "Teie veateade"
}
Vead aitavad
Vigade käsitlemine on programmeerimise põhiosa, olenemata sellest, millist keelt kasutate. JavaScriptil on suurepärane tugi erandite stiilis vigade esiletõstmiseks ja püüdmiseks. Sellel on ka mitu sisseehitatud veatüüpi, mida saate oma juhtumite jaoks käsitleda ja kasutada.
Mõned vead, nagu süntaksivead, võivad jääda avastamata, kui kirjutate JavaScripti lohakas režiimis. Range režiimi kasutamine võimaldab JavaScriptil tabada vigu, mida ta muidu eiraks.