How can you bubble up errors so they can be caught in the same try/catch block?

Have your function throw a specific type of object, and then in your catch block check to see if (err instanceof MyExceptionObj) and handle appropriately, otherwise re-throw it.

By re-throw I mean:

If the caught exception object isn't one you can handle, you should re-throw it to give any catch blocks further up a chance to handle it. If none do, the browser will catch it and display a JS error.

try {
   if ($.browser.msie) {
      throw new UnsupportedBrowserException();
   }
} catch (ex) {
   if (ex instanceof UnsupportedBrowserException) {
      alert('Your browser isn't supported.');
   } else {
      // We don't know how to handle this exception, throw it back.
      throw ex;
   }
}

You probably wouldn't do this in the real world.


You can only conditionally catch exceptions in JavaScript 1.7 and higher. Refer to the following:

try {
  0();
} catch (ex if ex instanceof TypeError) {
  // only catch TypeErrors
}

Otherwise, you have to catch all exceptions, do an instanceof check, and then rethrow the exceptions if the check returns true.