Start learning free

LESSON 609 OF 635 · OBJECT-ORIENTED PROGRAMMING

Errors and Exceptions in JavaScript in JavaScript

Lesson

TL ; DR:

When a method can't do what it was asked, it throws an error. The code that called it catches the error with try and catch.


spend(amount) {
    if (amount > this.money) {
        throw new Error("not enough money");
    }

    this.money -= amount;
}

try {
    wallet.spend(80);
} catch (e) {
    console.log("error: " + e.message);
}


Full lesson:

Some requests can't be done. A wallet with 50 can't spend 80.

The method could return a special value, like -1. But the caller may forget to check it. Then the program goes on with a wrong number.

An exception is better. It is an error that the program can't miss.

Throwing an error

  • throw new Error("not enough money") stops the method at once.
  • The lines after it don't run. So the wallet keeps its money.
  • Error is JavaScript's built-in error type.
  • The text in the parentheses is the error's message.

Catching it

  • Put the call inside a try block.
  • When the call throws, the rest of the try block is skipped.
  • The catch (e) block runs instead. e is the error.
  • e.message is its message.
  • Then the program goes on below the catch block.

An error that nobody catches stops the whole program. Node prints the error and the line where it happened.


Your task

A Wallet starts with 50. Its spend method takes money out and returns what is left.

  • In spend, throw an Error when amount is more than this.money. Its message is "not enough money".
  • In the loop, call spend inside a try block. Log what was spent and what is left.
  • Catch the error. Log error: and its message.

The loop tries to spend 20, then 40, then 30.

Expected output:

spent 20, 30 left
error: not enough money
spent 30, 0 left
STEP 1 OF 3
    Ctrl + Enter to check

    Raising Errors in JavaScript

    Keep going with JavaScript500+ step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free