Programmeringsfejl er uundgåelige. Før eller siden vil din ansøgning opleve noget uventet adfærd. Som ethvert andet programmeringssprog, rejser JavaScript fejl, når noget går galt i din kode.

Fejl forstyrrer det normale flow af en applikation. Men de hjælper også med at beskytte din applikation mod uforudsigelig adfærd. Det er afgørende at vide, hvordan man håndterer fejl korrekt.

Hvorfor er fejlhåndtering vigtig?

Fejlhåndtering bidrager til en forbedret brugeroplevelse. Du kan udskifte JavaScripts standardfejl og nogle gange udførlige fejl med dine egne mere læselige fejlmeddelelser. Du kan med ynde håndtere årsagerne til nogle fejl og holde dit program kørende i stedet for at få det afsluttet.

Fejlhåndtering er også nyttig under udvikling. Du kan fange en runtime fejl og gøre noget nyttigt med det, f.eks logger det på browserkonsollen. Dette er mere yndefuldt end fejlen, der forårsager et nedbrud og ikke ved, hvor eller hvorfor fejlen opstod.

Struktur af indbyggede JavaScript-fejl

JavaScripts fejl er objekter med tre egenskaber:

instagram viewer
  • navn: Dette er navnet på fejlen. For eksempel vil et manglende variabelnavn give en fejl kaldet SyntaxError.
  • besked: Dette er meddelelsens brødtekst og forklarer fejlen tekstmæssigt.
  • årsag: Du kan bruge denne egenskab med tilpassede fejl til at holde styr på opkaldsstakken.

Almindelige typer af fejl i JavaScript

Her er nogle almindelige fejl fundet i JavaScript.

Syntaks fejl

Syntaksfejl kan opstå, når JavaScript forsøger at fortolke din kode. Det vil give en fejl, hvis din kode ikke er i overensstemmelse med den korrekte syntaks. Nogle almindelige fejl, der kan forårsage syntaksfejl, er:

  • Manglende variabelnavne.
  • Mangler "}" efter en funktion.
  • Mangler ")" efter en betingelse.

Referencefejl

Referencefejl opstår, når et program forsøger henvise til en variabel som ikke er tilgængelig eller uden for rækkevidde.

Typefejl

JavaScript kan give en typefejl, når den ikke kan udføre en handling, fordi den forventede type er forskellig fra den, den modtager.

URI fejl

Denne fejl opstår, hvis du bruger en global URI-håndteringsfunktion – som decodeURIComponent() – forkert. Som et resultat mislykkes kodningen eller afkodningen.

AggregateError

Denne fejl bruges til at repræsentere flere fejl pakket ind i én. Brug det, når du vil smide mange fejl på én gang. For eksempel kan Promise.any() kaste en AggregateError(), når alle løfter, der er givet til den, afvises.

Intern fejl

En InternalError udløses, når der opstår en fejl inde i JavaScript-motoren.

RangeError

Nogle funktioner dikterer rækken af ​​værdier, du kan sende som argumenter. Denne fejl opstår, når du forsøger at sende en værdi, der ikke er inkluderet i dette område.

Fejlhåndtering med Try... Catch Block

JavaScript giver indbygget undtagelseshåndteringsfunktionalitet med prøv...fang...endelig blok. Det giver dig også mulighed for at rejse dine egne fejl ved hjælp af kaste operatør.

Du kan bruge en try...catch-blok til at håndtere fejl, der opstår under kørsel. Du skriver gyldig kode, som du forventer at udføre korrekt i try-blokken. I catch-blokken kan du skrive fejlhåndteringskode.

prøve {
// Gyldig Javascript-kode
} fangst (fejl) {
// Håndteringsfejl
} langt om længe {
// Udføres selv når der opstår en fejl
}

Fangstblokken ignoreres, hvis koden i try-blokken ikke giver nogen fejl. Hvis det giver en fejl, springer udførelsen til catch-blokken. Koden i den endelige blok kører uanset om der opstår en fejl eller ej. Denne blok er ikke obligatorisk, så udelad den, hvis du ikke har brug for den.

Den kode, du medtager i prøveblokken, skal være gyldig. Hvis det ikke er det, vil JavaScript give en parsingsfejl.

Lad os se på et praktisk eksempel:

prøve {
konsol.log (tekst)
} fangst (fejl) {
konsol.log(fejl.besked)
} langt om længe {
console.log("Udføres uanset")
}

Dette program forsøger at logge værdien af ​​tekstvariablen. Da denne variabel ikke er defineret, vil programmet give en fejl. Denne fejl er trykt på konsollen i fangblokken. Den endelige blok kører derefter og udskriver sin egen besked.

Referencefejl: tekst er ikke defineret
Udføres uanset

I situationer, hvor du har brug for at rejse din egen fejl, skal du bruge kaste operatør.

Overvej dette eksempel, der kaster en fejl, hvis dataene er falske:

konst data = getData()

prøve {
if (!data) {
kaste "Ingen data"
}

konsol.log (data)
// Blive ved
} fangst(fejl) {
konsol.log (fejl) // "Ingen data"
}

I dette eksempel kalder programmet funktionen getData() og tildeler dens resultat til datavariablen. I prøveblokken afgiver blokken en brugerdefineret fejl, hvis dataene er tomme. Fangstblokken fanger denne fejl og logger den til konsollen.

At kaste fejl er meget fordelagtigt under udvikling. Du kan bruge den tilpassede fejlmeddelelse til at forstå, hvorfor din applikation ikke fungerer som forventet.

Som dette eksempel viser, kan du bruge en streng til fejlobjektet. Du kan faktisk smide et hvilket som helst JavaScript-udtryk som en fejl. Af hensyn til sammenhængen med indbyggede fejl skal du dog bruge et JavaScript-objekt, der indeholder et navn og en besked.

kaste {
navn: "Fejlnavn",
besked: "Fejl besked"
}

Du kan også bruge JavaScripts indbyggede konstruktører, når du smider fejl. Disse konstruktører inkluderer blandt andre Error, SyntaxError og ReferenceError.

For at smide en fejl ved hjælp af fejlkonstruktøren, brug denne kode:

kastenyFejl("Ingen data")

Du kan nu henvise til navn og besked.

konsol.log (fejl.navn) // Fejl
konsol.log (fejl.meddelelse) // Ingen data

Udvidelse af JavaScript-fejlobjektet

En brugerdefineret fejlklasse er praktisk, når du håndterer fejl, der ikke svarer til de objekter, der allerede er leveret af JavaScript. For eksempel vil du måske isolere en datavalideringsfejl som en specifik type kaldet ValidationError.

Du kan bruge en JavaScript ES2015 klasse at oprette en brugerdefineret fejlklasse.

klasseValideringsfejlstrækker sigFejl{
konstruktør(besked) {
super(besked);
dette.navn = "Valideringsfejl";
}
}

Smid en fejl ved hjælp af ValidationError-klassen som denne:

kasteny ValidationError ("Din fejlmeddelelse")

Den kastede fejl vil være et objekt med navn og meddelelsesværdier.

{
navn: "Valideringsfejl",
besked: "Din fejlmeddelelse"
}

Fejl er der for at hjælpe

Fejlhåndtering er en grundlæggende del af programmering, uanset hvilket sprog du bruger. JavaScript har stor støtte til at rejse og fange fejl i stil med undtagelser. Den har også flere indbyggede fejltyper, som du kan håndtere og bruge til dine egne sager.

Nogle fejl som syntaksfejl kan blive uopdaget, når du skriver JavaScript i "sjusket tilstand". Brug af streng tilstand tillader JavaScript at fange fejl, som det ellers ville have ignoreret.