Felfångst i JavaScript
Den här artikeln förklarar felfångst i JavaScript.
YouTube Video
Felfångst i JavaScript
Felfångst i JavaScript är en viktig funktion för att fånga och hantera fel på ett korrekt sätt när ett program stöter på oväntade problem. Det är främst vanligt att använda try...catch
-syntax för att fånga och hantera fel. Dessutom kan felhantering vid arbete med Promises eller asynkrona operationer göras med async/await
eller Promise.prototype.catch
.
try...catch
-syntax
try...catch
används för att fånga och hantera fel när de uppstår inom ett kodblock.
1try {
2 // Code that may throw an error
3 let result = riskyFunction();
4 console.log(result);
5} catch (error) {
6 // Catch and handle the error
7 console.error("An error occurred:", error.message);
8} finally {
9 // Code that will always execute
10 console.log("Error handling has completed.");
11}
- Om ett fel uppstår i en
try
-block avbryts programmets körning ochcatch
-blocket körs. finally
-blocket körs alltid, oavsett om ett fel uppstår eller inte. Det är användbart för resurshantering och slutlig bearbetning, bland annat.
Kasta fel (throw
)
I JavaScript kan du uttryckligen utlösa ett fel med throw
-nyckelordet. Det används för att kasta anpassade felmeddelanden eller anpassade fel.
1function checkAge(age) {
2 if (age < 18) {
3 throw new Error("You are under 18 years old.");
4 }
5 return "Age verification completed.";
6}
7
8try {
9 let result = checkAge(15);
10 console.log(result);
11} catch (error) {
12 console.error(error.message); // Displays "You are under 18 years old."
13}
Felhantering i asynkrona operationer (Promise
och async/await
)
Vid utförande av asynkrona operationer är felhanteringen något annorlunda. Vid användning av Promises fångas fel med catch
-metoden.
1let promise = new Promise((resolve, reject) => {
2 // Asynchronous operation
3 setTimeout(() => reject(new Error("An issue has occurred!")), 1000);
4});
5
6promise
7 .then(result => console.log(result))
8 .catch(error => console.error(error.message)); // Displays "An issue has occurred!"
Vid asynkrona operationer med async/await
kan du hantera fel med try...catch
.
1async function fetchData() {
2 try {
3 let response = await fetch('https://api.example.com/data');
4 let data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error("An error occurred while fetching data:", error.message);
8 }
9}
10
11fetchData();
Sammanfattning
- Du kan fånga synkrona fel med
try...catch
-syntaxen. - Du kan kasta egna fel med
throw
. - Fel i asynkrona operationer kan hanteras med
Promise
-metodenscatch
eller medasync/await
ochtry...catch
.
Genom att använda dessa metoder kan du säkerställa att ditt program fungerar korrekt även när fel uppstår.
Error
Error
-klassen används för felhantering. Den ger möjligheten att skapa fel och tillhandahålla felmeddelanden samt stack-spårningar.
1try {
2 throw new Error("Something went wrong");
3} catch (e) {
4 console.log(e.message); // Something went wrong
5}
Grundläggande användning
Ett Error
-objekt kan skapas uttryckligen när ett fel uppstår. Du skapar en instans med new Error()
och skickar ett felmeddelande.
1const error = new Error("Something went wrong");
2console.log(error.message); // "Something went wrong"
3console.log(error.name); // "Error"
4
5// Stack trace (information about where the error occurred)
6console.log(error.stack);
Egenskaper hos Error
-objektet
Error
-objektet har följande egenskaper.
message
: Detta är felmeddelandet.name
: Namnet på felet, som standard är"Error"
.stack
: En stackspårning som visar var felet inträffade, användbar vid felsökning.
Skapa fel med throw
I JavaScript kan du skapa ett fel med hjälp av nyckelordet throw
. Detta används för att avbryta bearbetning i specifika situationer och lämna över kontrollen till en felhanterare.
1function doSomething() {
2 throw new Error("This function is not yet implemented");
3}
4
5try {
6 doSomething();
7} catch (e) {
8 console.error(e.message); // "This function is not yet implemented"
9}
Fel som skapas med throw
kan fångas med try...catch
-syntaxen.
Skapa anpassade fel
I JavaScript kan du skapa egna anpassade fel genom att utöka Error
-klassen. Detta gör att du kan skapa fel som är anpassade för specifika situationer.
1class CustomError extends Error {
2 constructor(message) {
3 super(message); // Call the parent class constructor
4 this.name = "CustomError"; // Set the error name
5 }
6}
7
8try {
9 throw new CustomError("A custom error has occurred");
10} catch (e) {
11 console.error(e.name); // "CustomError"
12 console.error(e.message); // "A custom error has occurred"
13}
Inbyggda felklasser
JavaScript har flera inbyggda felklasser som utökar Error
-klassen. Dessa används för att representera specifika fel.
ReferenceError
: Uppstår när du refererar till en variabel som inte existerar.TypeError
: Uppstår när en värdes typ skiljer sig från den förväntade typen.RangeError
: Uppstår när ett tal är utanför det tillåtna intervallet.SyntaxError
: Uppstår när kod som inte är syntaktiskt korrekt exekveras.EvalError
: Fel relaterade till användningen av funktioneneval()
. Den används sällan nuförtiden.URIError
: Uppstår när en ogiltig URI (kodnings- eller avkodningsfel) används.
Exempel: ReferenceError
Här är ett exempel på en ReferenceError
.
1try {
2 console.log(undefinedVariable); // Undefined variable
3} catch (e) {
4 console.error(e.name); // "ReferenceError"
5 console.error(e.message); // "undefinedVariable is not defined"
6}
Exempel: TypeError
Här är ett exempel på en TypeError
.
1try {
2 null.f(); // Attempting to call a function on null
3} catch (e) {
4 console.error(e.name); // "TypeError"
5 console.error(e.message); // "Cannot read properties of null (reading 'f')"
6}
finally
-block
I try...catch
-syntaxen används finally
-blocket för operationer som du vill utföra oavsett om ett fel inträffar eller inte.
1try {
2 throw new Error("An issue has occurred");
3} catch (e) {
4 console.error(e.message); // "An issue has occurred"
5} finally {
6 console.log("Performing cleanup");
7}
I det här exemplet utförs operationerna i finally
-blocket även om ett fel uppstår.
Fördelar med undantagshantering
Genom att korrekt implementera felhantering kan du förhindra att applikationen kraschar vid oväntat beteende. Genom att korrekt använda try...catch
-syntaxen och felobjekt kan du skriva mer robust kod.
1function divide(a, b) {
2 if (b === 0) {
3 throw new Error("Cannot divide by zero");
4 }
5 return a / b;
6}
7
8try {
9 console.log(divide(4, 0)); // An error will occur
10} catch (e) {
11 console.error(e.message); // "Cannot divide by zero"
12}
Sammanfattning
Error
-klassen används för att representera en felorsak och utföra felhantering.- Använd
try...catch...finally
-syntaxen för att hantera fel och förhindra oväntad applikationsavslutning. - Det är också möjligt att utöka
Error
-klassen för att skapa egna fel. - Du kan hantera olika typer av fel genom att använda inbyggda felfklasser som
TypeError
ochReferenceError
.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.