Błędy w JavaScript - Throw i Try to Catch
- Poprzednia strona Priorytet operatorów JS
- Następna strona Zasięg JS
try
Zdanie pozwala na testowanie błędów w bloku kodu.
catch
Zdanie pozwala na obsługę błędów.
throw
instrukcja allow you to create custom errors.
finally
Pozwala na wykonywanie kodu, po try i catch, niezależnie od wyniku.
Błędy zawsze się zdarzają!
Podczas wykonywania kodu JavaScript może wystąpić wiele różnych błędów.
Błąd może być błędem programisty, błędem spowodowanym błędem wejściowym, lub innymi nieprzewidzianymi problemami.
Przykład
W tym przykładzie, poprzez alert
Napisz kod ostrzegawczy, aby celowo wywołać błąd:
<p id="demo"></p> <script> try { alert("Witamy na naszej stronie!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript uchwytuje alert jako błąd, a następnie wykonuje kod do obsługi tego błędu.
JavaScript try i catch
try
Zdanie pozwala zdefiniować blok kodu, aby wykryć błąd podczas jego wykonywania.
catch
Zdanie pozwala zdefiniować blok kodu do wykonania, jeśli w bloku try wystąpi błąd.
Zdania JavaScript try
i catch
Pojawia się w parze:
try { Kod do testowania } catch(err) { Kod blokujący błąd }
JavaScript rzuca błąd
Gdy występuje błąd, JavaScript zazwyczaj zatrzymuje działanie i generuje komunikat o błędzie.
Tego terminu używa się w ten sposób:JavaScript rzuca wyjątki (błędy).
JavaScript rzeczywiście tworzy wyjątki (błędy) z dwoma atrybutami Obiekt błędu:name
i message
.
throw
throw
instrukcja allow you to create custom errors.
Technicznie możeszRzuć wyjątek (rzucenie błędu).
Wyjątki mogą być stringami, liczbami, wartościami logicznymi lub obiektami JavaScript:
throw "Too big"; // Rzuć tekst throw 500; // Rzuć liczbę
jeśli throw
i try
i catch
Razem z try i catch, można kontrolować przepływ programu i generować niestandardowe komunikaty o błędach.
Przykład walidacji wejścia
W tym przykładzie sprawdzany jest wprowadzony tekst. Jeśli wartość jest niepoprawna, zostanie rzucony wyjątek (err).
Ten wyjątek (err) jest łapany przez instrukcję catch i wyświetla niestandardową wiadomość o błędzie:
<!DOCTYPE html> <html> <body> <p>Wprowadź liczbę z zakresu 5 - 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Testuj wprowadzenie</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 "Empty"; if(isNaN(x)) throw "nie jest liczbą"; x = Number(x); if(x < 5) throw "Too small"; if(x > 10) throw "Too big"; } catch(err) { message.innerHTML = "Wprowadzenie to " + err; } } </script> </body> </html>
Walidacja HTML
Powyższy kod to jedynie przykład.
Nowoczesne przeglądarki często łączą JavaScript z wbudowaną walidacją HTML, używając predefiniowanych reguł walidacji zdefiniowanych w atrybutach HTML:
<input id="demo" type="number" min="5" max="10" step="1">
Więcej na temat walidacji formularzy znajdziesz w dalszych rozdziałach tego tutoriala.
finally 语句
finally
Zwykle stosuje się to po try i catch, aby wykonać kod niezależnie od wyniku:
try { // Kod do testowania } catch(err) { // Kod do obsługi błędów } finally { // Każdy kod, który ma być wykonany niezależnie od wyniku }
Przykład
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "jest pusty"; if(isNaN(x)) throw "nie jest liczbą"; x = Number(x); if(x > 10) throw "za dużo"; if(x < 5) throw "za mało"; } catch(err) { message.innerHTML = "Błąd: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Obiekt błędu
JavaScript ma wbudowany obiekt błędu, który dostarcza informacje o błędach.
obiekt błędu error dostarcza dwa przydatne atrybuty:name
i message
.
Atrybuty obiektu błędu
Atrybut | Opis |
---|---|
name | Ustawia lub zwraca nazwę błędu |
message | Ustawia lub zwraca komunikat błędu (jedno string) |
Wartości Nazwy Błędu
Atrybut name błędu może zwrócić sześć różnych wartości:
Nazwa błędu | Opis |
---|---|
Błąd eval | Błąd, który wystąpił w funkcji eval() |
Błąd zakresu | Wystąpił błąd poza zakresem liczby |
Błąd odniesienia | Wystąpił nielegalne odniesienie |
Błąd składni | Wystąpił błąd składni |
TypeError | Wystąpił błąd typowy |
URIError | Błąd, który wystąpił w encodeURI() |
Poniżej szczegółowo wyjaśnimy te sześć różnych wartości.
Błąd eval
Błąd eval
oznaki błędów w funkcji eval().
Nowsze wersje JavaScript nie rzucają żadnych Błąd eval
Proszę użyć Błąd składni
zastąp.
Błąd zakresu
Błąd zakresu
zostanie rzucony, gdy używasz liczby poza legalnym zakresem wartości.
Na przykład: nie możesz ustawić liczby cyfr znaczących na 500.
Przykład
var num = 1; try { num.toPrecision(500); // Liczba nie może mieć 500 cyfr znaczących } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Błąd odniesienia
Jeśli używasz (odnosi się do) zmiennej, która nie została zadeklarowana, Błąd odniesienia
zostanie rzucony:
Przykład
var x; try { x = y + 1; // y nie może być odniesiona (użyta) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Błąd składni
Jeśli obliczysz kod z błędem składniowym, Błąd składni
Rzucono:
Przykład
try { eval("alert('Hello)"); // Brak ' spowoduje błąd } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Błąd typowy
Jeśli wartość, którą używasz, nie znajduje się w oczekiwanym zakresie wartości, TypeError
Rzucono:
Przykład
var num = 1; try { num.toUpperCase(); // Nie możesz przekształcić liczby na wielkie litery } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Błąd URI
Jeśli używasz nielegalnych znaków w funkcji URI, URIError
Rzucono:
Przykład
try { decodeURI("%%%"); // Nie możesz skodować tych procentów w URI } catch(err) { document.getElementById("demo").innerHTML = err.name; }
Niestandardowe atrybuty obiektu Error
Mozilla i Microsoft zdefiniowały niestandardowe atrybuty obiektu error:
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
Nie używaj tych właściwości na publicznych stronach. Nie działają we wszystkich przeglądarkach.
- Poprzednia strona Priorytet operatorów JS
- Następna strona Zasięg JS