14

Objective

Throw InvalidArgumentException in a JavaScript method like one does in Java or similar languages.

Background

I have been trying to familiarize myself with JavaSctipt error handling, and I know I can throw exceptions using the throw keyword.

To achieve this, I read the throw documentation on MDN and the Error documentation on MDN as well.

Problem

So far this is my code:

if (mySize >= myArray.length)
    throw new Error("InvalidArgumentExcpetion - BANG!!!!");

This code has some problems for me:

  1. I have the text in the exception itself. Right now I have BANG, but tomorrow I may want BONG and if I decide to change it, I have to look everywhere!
  2. I am using an Error, and not really a new object with the type InvalidArgumentExcpetion. Is this the correct way?

Questions

So now I am confused.

  1. Should I create a new object like in the throw documentation, or create an Error Message?
  2. Doesn't JavaScript have a InvalidArgumentException object that I can use?
  3. How should I proceed in order to have a maintainable way to throw errors that uses ECMA6?
Flame_Phoenix
  • 14,906
  • 35
  • 125
  • 249

3 Answers3

13

After doing research, I now have come down to a solution that I like. Special kudos to Toan, I would gladly chose his answer, but since I do feel that it is still a little bit incomplete, I decided to create my own answer with my own findings. Hope it helps someone !

Problems:

  1. Using the solution proposed by Toan: https://stackoverflow.com/a/38146237/1337392

  2. It is a possible, albeit if you want customization you do need to create your own object.

Answers:

  1. If you want to handle exceptions based on their types like in Java, you should create a new object like in the document. (by Toan Nguyen)
  2. Javascript does not have InvalidArgumentException (by Toan Nguyen)
  3. After reasearching, this solution is the one I found: https://stackoverflow.com/a/32750746/1337392

Credits:

  • Toan Nguyen, for the first answers and his great ideas
  • David Wickström, for suggesting an article that led to an article that led to a blog where the answer I was looking for was.

Thanks for all the help guys! kudos++ for all!

Community
  • 1
  • 1
Flame_Phoenix
  • 14,906
  • 35
  • 125
  • 249
8

I have been trying to familiarize myself with JavaSctipt [sic] error handling, and I know I can throw exceptions [....] but tomorrow I may want BONG [....]

You could throw a TypeError or a SyntaxError if they make more sense. But no need to get too fancy. Simply throw an Error with a message as it looks as though you're already doing:

if (myArray && myArray.length < mySize) throw new Error('`mySize` must be larger');

And if you decide tomorrow you want BONG:

if (!myBong) throw new Error('Officer, that is not `myBong`');

For more info on built-in errors types read the docs.

vhs
  • 7,906
  • 2
  • 61
  • 66
6

Please see the answer below:

  1. If you want to handle exceptions based on their types like in Java, you should create a new object like in the document.
  2. If you don't want to look for the message everywhere, create a new error list like you do in Java. For instance:
let errors = {
    invalidOperation: 'Invalid operation',
    unAuthorized: 'You are not authorized to use this function',       
}

and use them instead of hard-coded strings like

throw new InvalidOperationException(errors.invalidOperation);
  1. Javascript does not have InvalidArgumentException
ElliotSchmelliot
  • 6,236
  • 3
  • 37
  • 62
Toan Nguyen
  • 10,785
  • 5
  • 39
  • 56
  • So, you are saying I have to create my own object, right? – Flame_Phoenix Jul 01 '16 at 13:16
  • Yes, that is the way to do if you have logic handling exceptions based on their types. If you just have a simple try/catch {}, and then work on the message then you can use the generic Error type. – Toan Nguyen Jul 01 '16 at 14:12
  • is `InvalidOperationException` something that JavaScript has, or did you create it? I could not find any references to it in the `Error` doucmentation. – Flame_Phoenix Jul 01 '16 at 14:43
  • I created InvalidOperationException. Javascript does not have such an error. – Toan Nguyen Jul 01 '16 at 22:57