JavaScript Throw Error: Custom Exceptions Guide
Direct Answer & Overview
The JavaScript throw statement generates a user-defined exception, pausing the current execution thread and passing control to the nearest enclosing catch block. Instantiating Error objects provides critical stack trace context for debugging.
JavaScript Source Code
function divide(a, b) {
if (b === 0) {
throw new Error("Cannot divide by zero");
}
return a / b;
}
console.log(divide(10, 2));How does this JavaScript code work?
The `throw` statement allows developers to signal exceptional runtime conditions, invalid arguments, or state violations. While JavaScript permits throwing any value (strings, numbers, objects), you should always throw instances of the built-in `Error` class (e.g. `throw new Error('message')`) or specialized subclasses like `TypeError` and `RangeError`. Instantiating `Error` captures a complete execution call stack for rapid diagnosis.
What is the expected terminal output?
Executing this code in JS CodeLab produces the following stdout sequence in the developer console:
5Common mistakes to avoid
- !Throwing raw primitive strings like throw 'error' instead of Error objects, which strips debugging stack traces.
- !Throwing errors for expected, common control flow conditions instead of true exceptions.
- !Throwing exceptions without informative, actionable error messages.
- !Not documenting the exceptions that a public function or API might throw.
Frequently Asked Questions
Why should you throw new Error() instead of a string?
The Error constructor captures the current call stack trace at the exact moment of instantiation, which is critical for identifying the origin line of the error.
What built-in Error subclasses exist in JavaScript?
Standard subclasses include TypeError (invalid types), RangeError (out-of-range numeric values), SyntaxError, ReferenceError, and URIError.
Can you create custom Error classes in JavaScript?
Yes. You can extend the base Error class using class ValidationError extends Error { ... } with custom properties and status codes.
Comprehensive Tutorial
Want an in-depth understanding of this topic?
Read our complete, interactive tutorial covering memory management, edge cases, and best practices.
Read the full error handling tutorial →