Debugging JavaScript: Handling Runtime Exceptions [con't]
A variation of error swallowing is to display a generic error for anything that goes wrong:
Now the problem is that the error is so generic as to be of no benefit for the client or developer.
Use Error Types to Create More Meaningful Messages
There are six core Error classes in JavaScript that extend the Error object.
- EvalError:
- Occurs within the
eval()function.
- RangeError:
- Occurs when a numeric variable or parameter is outside of its valid range.
- ReferenceError:
- Occurs when de-referencing an invalid reference.
- SyntaxError:
- Occurs while parsing code.
- TypeError:
- Occurs when a variable or parameter is not of a valid type.
- URIError:
- Occurs when
encodeURI()ordecodeURI()are passed invalid parameters.
switch statement:
Error Properties
As in all things JavaScript, there are some error properties that are supported by all major browsers, while others are vendor specific. Here is the list of available error properties:
Standard Properties
constructor: Specifies the function that created an instance's prototype.
message: Error message.
name: One of the six Error classes outlined above, or simply "Error".
Vendor-specific Extensions
Microsoft:
description: Error description. Similar to message.
number: Error number.
Mozilla:
fileName: Path to file that raised this error.
lineNumber: Line number in file that raised this error.
stack: Stack trace.
The following code creates a customized error message using a combination of error properties:
Throwing Your Own Errors
The throw statement gives you the ability to create custom exceptions
in order to generate even more specific and detailed error messages. In
addition to Errors, the throw statement works with strings, integers, booleans
or just about any object type. Here's a function that validates an age against
minimum and maximum values and throws an appropriate error if it fails.
Regardless of the results, it always returns success or failure:
Adding Custom Properties to Your Errors
Having the ability to throw objects gives us the advantage of being able
to define our own properties and methods. In this example, the error is
really an object literal. It would be easy to imagine how the error handling
code could use the htmlMessage to insert a link in the document using the
DOM:
While perhaps not on par with some full-fledged programming languages, JavaScript's error handling is making great strides. Next time, we'll examine some ways to make very thorough debugging statements as well as examine some tools that can assist us in JavaScript development.
Rob Gravelle combined his love of programming and music to become a software guru and accomplished guitar player. He created systems that are used by Canada Border Services, CSIS and other Intelligence-related organizations. As a software consultant, Rob has developed Web applications for many businesses and recently created a MooTools version of PHPFreechat for ViziMetrics. Musically, Rob recently embarked on a solo music career, after playing with Ivory Knight since 2000. That band was rated as one Canada's top bands by Brave Words magazine (issue #92) and released two CDs. Rob's latest, entitled KNIGHTFALL, was a collaboration between himself, the former Ivory Knight vocalist, and legendary guitarist/producer, Jeff Waters of Annihilator fame. Rob is available for short-term software projects and recording session work. to inquire, but note that, due to the volume of emails received, he cannot respond to every email. Potential jobs and praise receive highest priority!
Original: April 27, 2009


