20

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?
1

3 Answers 3

18

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!

Sign up to request clarification or add additional context in comments.

Comments

9

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);
    
  3. JavaScript does not have InvalidArgumentException.

4 Comments

So, you are saying I have to create my own object, right?
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.
is InvalidOperationException something that JavaScript has, or did you create it? I could not find any references to it in the Error doucmentation.
I created InvalidOperationException. Javascript does not have such an error.
9

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.