Τα λάθη προγραμματισμού είναι αναπόφευκτα. Αργά ή γρήγορα, η εφαρμογή σας θα αντιμετωπίσει κάποια απροσδόκητη συμπεριφορά. Όπως κάθε άλλη γλώσσα προγραμματισμού, η JavaScript δημιουργεί σφάλματα όταν κάτι πάει στραβά στον κώδικά σας.
Τα σφάλματα διαταράσσουν την κανονική ροή μιας εφαρμογής. Αλλά βοηθούν επίσης στην προστασία της εφαρμογής σας από απρόβλεπτη συμπεριφορά. Το να γνωρίζετε πώς να χειρίζεστε σωστά τα λάθη είναι ζωτικής σημασίας.
Γιατί είναι σημαντικός ο χειρισμός σφαλμάτων;
Ο χειρισμός σφαλμάτων συμβάλλει σε μια βελτιωμένη εμπειρία χρήστη. Μπορείτε να ανταλλάξετε τα προεπιλεγμένα και μερικές φορές περιεκτικά σφάλματα της JavaScript με δικά σας πιο αναγνώσιμα από τον άνθρωπο μηνύματα σφάλματος. Μπορείτε να χειριστείτε με χάρη τις αιτίες ορισμένων σφαλμάτων και να διατηρήσετε το πρόγραμμά σας σε λειτουργία αντί να το τερματίσετε.
Ο χειρισμός σφαλμάτων είναι επίσης χρήσιμος κατά την ανάπτυξη. Μπορείτε να εντοπίσετε ένα σφάλμα χρόνου εκτέλεσης και να κάνετε κάτι χρήσιμο με αυτό, όπως
καταγραφή του στην κονσόλα του προγράμματος περιήγησης. Αυτό είναι πιο χαριτωμένο από το σφάλμα που προκαλεί σύγκρουση και δεν γνωρίζει πού ή γιατί συνέβη το σφάλμα.Δομή των ενσωματωμένων σφαλμάτων JavaScript
Τα σφάλματα JavaScript είναι αντικείμενα με τρεις ιδιότητες:
- όνομα: Αυτό είναι το όνομα του σφάλματος. Για παράδειγμα, ένα όνομα μεταβλητής που λείπει θα προκαλέσει ένα σφάλμα που ονομάζεται SyntaxError.
- μήνυμα: Αυτό είναι το σώμα του μηνύματος και εξηγεί το σφάλμα με κείμενο.
- αιτία: Μπορείτε να χρησιμοποιήσετε αυτήν την ιδιότητα με προσαρμοσμένα σφάλματα για να παρακολουθείτε τη στοίβα κλήσεων.
Συνήθεις τύποι σφαλμάτων στο JavaScript
Ακολουθούν ορισμένα κοινά σφάλματα που εντοπίζονται στο JavaScript.
Συντακτικό λάθος
Μπορεί να προκύψουν συντακτικά σφάλματα όταν η JavaScript προσπαθεί να ερμηνεύσει τον κώδικά σας. Θα δημιουργήσει ένα σφάλμα εάν ο κώδικάς σας δεν συμμορφώνεται με τη σωστή σύνταξη. Μερικά κοινά σφάλματα που μπορούν να προκαλέσουν συντακτικά σφάλματα είναι:
- Λείπουν ονόματα μεταβλητών.
- Λείπει το "}" μετά από μια συνάρτηση.
- Λείπει το ")" μετά από μια συνθήκη.
Σφάλμα αναφοράς
Προκύπτουν σφάλματα αναφοράς όταν ένα πρόγραμμα προσπαθεί να το κάνει αναφορά σε μια μεταβλητή που δεν είναι διαθέσιμο ή εκτός πεδίου εφαρμογής.
Τυπογραφικό λάθος
Η JavaScript μπορεί να προκαλέσει ένα σφάλμα τύπου όταν δεν μπορεί να εκτελέσει μια λειτουργία επειδή ο τύπος που αναμένει είναι διαφορετικός από αυτόν που λαμβάνει.
Σφάλμα URIE
Αυτό το σφάλμα παρουσιάζεται εάν χρησιμοποιείτε εσφαλμένα μια καθολική συνάρτηση χειρισμού URI—όπως decodeURIcomponent()—. Ως αποτέλεσμα, η κωδικοποίηση ή η αποκωδικοποίηση αποτυγχάνει.
Συγκεντρωτικό Σφάλμα
Αυτό το σφάλμα χρησιμοποιείται για την αναπαράσταση πολλαπλών σφαλμάτων τυλιγμένα σε ένα. Χρησιμοποιήστε το όταν θέλετε να ρίξετε πολλά σφάλματα ταυτόχρονα. Για παράδειγμα, το Promise.any() μπορεί να ρίξει ένα AggregateError() όταν απορρίπτονται όλες οι υποσχέσεις που του μεταβιβάστηκαν.
Εσωτερικό σφάλμα
Ένα Εσωτερικό Σφάλμα εμφανίζεται όταν παρουσιαστεί σφάλμα μέσα στον κινητήρα JavaScript.
Σφάλμα εύρους
Ορισμένες συναρτήσεις υπαγορεύουν το εύρος τιμών που μπορείτε να μεταβιβάσετε ως ορίσματα. Αυτό το σφάλμα παρουσιάζεται όταν προσπαθείτε να περάσετε μια τιμή που δεν περιλαμβάνεται σε αυτό το εύρος.
Αντιμετώπιση σφαλμάτων με τη δοκιμή... Catch Block
Η JavaScript παρέχει ενσωματωμένη λειτουργία χειρισμού εξαιρέσεων με το δοκίμασε…πιάσε…επιτέλους ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Σας επιτρέπει επίσης να αναφέρετε τα δικά σας σφάλματα χρησιμοποιώντας το βολή χειριστής.
Μπορείτε να χρησιμοποιήσετε ένα μπλοκ try…catch για να χειριστείτε σφάλματα που εμφανίζονται κατά τη διάρκεια του χρόνου εκτέλεσης. Γράφετε έγκυρο κώδικα που περιμένετε να εκτελεστεί σωστά στο μπλοκ δοκιμής. Στο μπλοκ catch, μπορείτε να γράψετε κώδικα χειρισμού σφαλμάτων.
προσπαθήστε {
// Έγκυρος κώδικας Javascript
} σύλληψη (λάθος) {
// Χειρισμός σφάλματος
} τελικά {
// Εκτελείται ακόμη και όταν παρουσιαστεί σφάλμα
}
Το μπλοκ catch αγνοείται εάν ο κώδικας στο μπλοκ δοκιμής δεν προκαλεί σφάλματα. Εάν εμφανίσει ένα σφάλμα, η εκτέλεση μεταβαίνει στο μπλοκ catch. Ο κώδικας στο τελικό μπλοκ εκτελείται είτε παρουσιάζεται σφάλμα είτε όχι. Αυτό το μπλοκ δεν είναι υποχρεωτικό, οπότε παραλείψτε το εάν δεν το χρειάζεστε.
Ο κωδικός που συμπεριλαμβάνετε στο μπλοκ δοκιμής πρέπει να είναι έγκυρος. Εάν δεν είναι, η JavaScript θα εμφανίσει ένα σφάλμα ανάλυσης.
Ας δούμε ένα πρακτικό παράδειγμα:
προσπαθήστε {
κονσόλα.log (κείμενο)
} σύλληψη (λάθος) {
κονσόλα.κούτσουρο(λάθος.μήνυμα)
} τελικά {
console.log("Θα εκτελεστεί ανεξάρτητα")
}
Αυτό το πρόγραμμα προσπαθεί να καταγράψει την τιμή της μεταβλητής κειμένου. Δεδομένου ότι αυτή η μεταβλητή δεν έχει οριστεί, το πρόγραμμα θα εμφανίσει ένα σφάλμα. Αυτό το σφάλμα εκτυπώνεται στην κονσόλα στο μπλοκ catch. Στη συνέχεια, το τελικό μπλοκ εκτελείται και εκτυπώνει ένα δικό του μήνυμα.
Σφάλμα αναφοράς: το κείμενο δεν ορίζεται
Θα εκτελεστεί ανεξάρτητα
Σε περιπτώσεις όπου πρέπει να αναφέρετε το δικό σας σφάλμα, χρησιμοποιήστε το βολή χειριστής.
Εξετάστε αυτό το παράδειγμα που δημιουργεί ένα σφάλμα εάν τα δεδομένα είναι ψευδή:
συνθ δεδομένα = getData()
προσπαθήστε {
αν (!δεδομένα) {
βολή "Χωρίς δεδομένα"
}
κονσόλα.log (δεδομένα)
// να συνεχίσει
} σύλληψη(λάθος) {
κονσόλα.log (σφάλμα) // "Χωρίς δεδομένα"
}
Σε αυτό το παράδειγμα, το πρόγραμμα καλεί τη συνάρτηση getData() και εκχωρεί το αποτέλεσμά της στη μεταβλητή δεδομένων. Στο μπλοκ δοκιμής, το μπλοκ εμφανίζει προσαρμοσμένο σφάλμα εάν τα δεδομένα είναι άδεια. Το μπλοκ catch εντοπίζει αυτό το σφάλμα και το καταγράφει στην κονσόλα.
Τα λάθη ρίψης είναι πολύ ευεργετικά κατά την ανάπτυξη. Μπορείτε να χρησιμοποιήσετε το προσαρμοσμένο μήνυμα σφάλματος για να κατανοήσετε γιατί η εφαρμογή σας δεν λειτουργεί όπως αναμένεται.
Όπως δείχνει αυτό το παράδειγμα, μπορείτε να χρησιμοποιήσετε μια συμβολοσειρά για το αντικείμενο σφάλματος. Μπορείτε πραγματικά να ρίξετε οποιαδήποτε έκφραση JavaScript ως σφάλμα. Ωστόσο, για λόγους συνέπειας με τα ενσωματωμένα σφάλματα, χρησιμοποιήστε ένα αντικείμενο JavaScript που περιέχει ένα όνομα και ένα μήνυμα.
βολή {
όνομα: "Όνομα σφάλματος",
μήνυμα: "Μήνυμα λάθους"
}
Μπορείτε επίσης να χρησιμοποιήσετε τους ενσωματωμένους κατασκευαστές της JavaScript όταν κάνετε λάθη. Αυτοί οι κατασκευαστές περιλαμβάνουν μεταξύ άλλων το Error, το SyntaxError και το ReferenceError.
Για να εμφανίσετε ένα σφάλμα χρησιμοποιώντας τον κατασκευαστή Σφάλμα, χρησιμοποιήστε αυτόν τον κώδικα:
βολήνέοςΛάθος("Χωρίς δεδομένα")
Τώρα μπορείτε να αναφέρετε το όνομα και το μήνυμα.
κονσόλα.log (error.name) // Λάθος
κονσόλα.log (error.message) // Χωρίς δεδομένα
Επέκταση του αντικειμένου σφάλματος JavaScript
Μια προσαρμοσμένη κλάση σφάλματος είναι χρήσιμη κατά τον χειρισμό σφαλμάτων που δεν αντιστοιχούν στα αντικείμενα που παρέχονται ήδη από τη JavaScript. Για παράδειγμα, μπορεί να θέλετε να απομονώσετε ένα σφάλμα επικύρωσης δεδομένων ως συγκεκριμένο τύπο που ονομάζεται ValidationError.
Μπορείτε να χρησιμοποιήσετε α Κλάση JavaScript ES2015 για να δημιουργήσετε μια προσαρμοσμένη κλάση σφάλματος.
τάξηΣφάλμα επικύρωσηςεκτείνεταιΛάθος{
κατασκευαστής(μήνυμα) {
σούπερ(μήνυμα);
αυτό.όνομα = "Σφάλμα επικύρωσης";
}
}
Πραγματοποιήστε ένα σφάλμα χρησιμοποιώντας την κλάση ValidationError ως εξής:
βολήνέος ValidationError ("Το μήνυμα σφάλματος σας")
Το σφάλμα θα είναι ένα αντικείμενο με το όνομα και τις τιμές του μηνύματος.
{
όνομα: "Σφάλμα επικύρωσης",
μήνυμα: "Το μήνυμα σφάλματος σας"
}
Υπάρχουν σφάλματα για βοήθεια
Ο χειρισμός σφαλμάτων είναι ένα θεμελιώδες μέρος του προγραμματισμού, όποια γλώσσα κι αν χρησιμοποιείτε. Η JavaScript έχει μεγάλη υποστήριξη για την αύξηση και την καταγραφή σφαλμάτων στο στυλ των εξαιρέσεων. Έχει επίσης πολλούς ενσωματωμένους τύπους σφαλμάτων που μπορείτε να χειριστείτε και να χρησιμοποιήσετε για τις δικές σας περιπτώσεις.
Ορισμένα σφάλματα, όπως τα συντακτικά σφάλματα, μπορεί να μην εντοπιστούν όταν γράφετε JavaScript σε "ακατάλληλη λειτουργία". Η χρήση αυστηρής λειτουργίας επιτρέπει στην JavaScript να εντοπίζει σφάλματα που διαφορετικά θα αγνοούσε.