Το αντικείμενο Error

Στη διάρκεια εκτέλεσης ενός προγράμματος υπάρχει περίπτωση να προκύψει λάθος ή από λάθος κώδικα (bug) ή από λάθος του συστήματος.

Στην περίπτωση αυτή η μηχανή της javascript πετάει (throws) ένα αντικείμενο Error το οποίο περιέχει κάποιο μήνυμα σχετικά με το λάθος που προέκυψε.

Για να διαχειριστούμε σωστά τα λάθη χρησιμοποιούμε τα μπλοκ (block) try, catch και προαιρετικά το finally με το τρόπο που θα δούμε πιο κάτω.

Το αντικείμενο Error είναι ένα γενικού τύπου αντικείμενο για λάθη και χρησιμοποιείται περισσότερο για προσαρμοσμένα (custom ή user-defined) λάθη.

Η σύνταξή του είναι:

new Error([message]);

Για να δημιουργήσουμε ένα νέο αντικείμενο Error χρησιμοποιούμε τη λέξη new και για να "πετάξουμε" το αντικείμενο χρησιμοποιούμε τη λέξη throw.

Παράδειγμα

<script>
   var username = "";
   try {
      if(username === "") 
         throw new Error('oops, username must not be empty');
   } catch (e) {
      console.log(e.name + ': ' + e.message);
   }
</script>
Error: oops, username must not be empty

Εκτός από το αντικείμενο Error, η javascript παρέχει μια σειρά προκαθορισμένου τύπου λάθη (errors) τα οποία τα κάνει throw όταν το σχετικό λάθος προκύψει.

Τα προκαθορισμένου τύπου λάθη είναι:

Όνομα ErrorΕπεξήγηση
EvalError Γίνεται throw όταν προκύψει κάποιο λάθος σχετικό με την εντολή eval() αλλά έχει αντικατασταθεί από το SyntaxError.
AggregateError Χρησιμοποιείται όταν πολλά errors χρειάζεται να συσσωρευτούν σε ένα και να αναφερθούν με μία εντολή.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError
RangeError Γίνεται throw όταν δωθεί τιμή εκτός ορίων.
ReferenceError Γίνεται throw όταν γίνει αναφορά σε μη δηλωμένη μεταβλητή η συνάρτηση.
SyntaxError Γίνεται throw όταν προκύψει συντακτικό λάθος.
TypeError Γίνεται throw όταν προκύψει λάθος σχετικό με τον τύπο μεταβλητής.
URIError Γίνεται throw όταν προκύψει λάθος σχετικό με την εντολή encodeURI().

Παράδειγμα RangeError

<script>
   var num = 1;
   try {
      num.toPrecision(500);
   } catch(e) {
      console.log(e.name, e.message);
   }
</script>
RangeError, precision 500 out of range

Παράδειγμα ReferenceError

<script>
   var x;
   try {
      x = y + 1;
   } catch(e) {
      console.log(e.name, e.message);
   }
</script>
ReferenceError, y is not defined

Παράδειγμα SyntaxError

<script>
   try {
      eval('hello world');
   } catch(e) {
      console.log(e.name, e.message);
   }
</script>
SyntaxError, missing ; before statement

Παράδειγμα TypeError

<script>
   var num = 123;
   try {
      num.toUpperCase();
   } catch(e) {
      console.log(e.name, e.message);
   }
</script>
TypeError, num.toUpperCase is not a function

Παράδειγμα URIError

<script>
   try {
      decodeURI("%%%");
   } catch(e) {
      console.log(e.name, e.message);
   }
</script>
URIError, malformed URI sequence

Για περισσσότερες πληροφορίες σχετικά με το Error: Δείτε: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error