Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between `throw new Error` and `throw someObject`?

I want to write a common error handler which will catch custom errors thrown on purpose at any instance of the code.

When I did throw new Error('sample') like in the following code

try {     throw new Error({'hehe':'haha'});     // throw new Error('hehe'); } catch(e) {     alert(e);     console.log(e); } 

Log shows in Firefox as Error: [object Object] and I couldn’t parse the object.

For the second throw the log shows as: Error: hehe

Whereas when I did

try {     throw ({'hehe':'haha'}); } catch(e) {     alert(e);     console.log(e); } 

the console showed as: Object { hehe="haha"} in which I was able to access the error properties.

What is the difference?

Is the difference as seen in the code? Like string will be just passed as string and object as objects but the syntax will be different?

I haven’t explored throwing error object… I had done only throwing strings.

Is there any other way than the above two mentioned methods?

like image 867
Jayapal Chandran Avatar asked Feb 06 '12 06:02

Jayapal Chandran


People also ask

What is a throw error?

The throw statement throws (generates) an error. The technical term for this is: The throw statement throws an exception. The exception can be a JavaScript String, a Number, a Boolean or an Object: throw "Too big"; // throw a text.

What does it mean to throw an error in JavaScript?

The throw statement throws a user-defined exception. Execution of the current function will stop (the statements after throw won't be executed), and control will be passed to the first catch block in the call stack. If no catch block exists among caller functions, the program will terminate.

What is throw error in Nodejs?

It calls a function, which calls another function, which in turn throws an error. It is at the point of error when the program halts and begins tracing the function that threw the error.


2 Answers

The difference between 'throw new Error' and 'throw someObject' in javascript is that throw new Error wraps the error passed to it in the following format −

{ name: 'Error', message: 'String you pass in the constructor' }

The throw someObject will throw the object as is and will not allow any further code execution from the try block, ie same as throw new Error.

Here is a good explanation about The Error object and throwing your own errors

The Error Object

Just what we can extract from it in an event of an error? The Error object in all browsers support the following two properties:

  • name: The name of the error, or more specifically, the name of the constructor function the error belongs to.

  • message: A description of the error, with this description varying depending on the browser.

Six possible values can be returned by the name property, which as mentioned correspond to the names of the error's constructors. They are:

Error Name          Description  EvalError           An error in the eval() function has occurred.  RangeError          Out of range number value has occurred.  ReferenceError      An illegal reference has occurred.  SyntaxError         A syntax error within code inside the eval() function has occurred.                     All other syntax errors are not caught by try/catch/finally, and will                     trigger the default browser error message associated with the error.                      To catch actual syntax errors, you may use the onerror event.  TypeError           An error in the expected variable type has occurred.  URIError            An error when encoding or decoding the URI has occurred                     (ie: when calling encodeURI()). 

Throwing your own errors (exceptions)

Instead of waiting for one of the 6 types of errors to occur before control is automatically transferred from the try block to the catch block, you can also explicitly throw your own exceptions to force that to happen on demand. This is great for creating your own definitions of what an error is and when control should be transferred to catch.

like image 93
Hemant Metalia Avatar answered Sep 22 '22 23:09

Hemant Metalia


throw "I'm Evil"

throw will terminate the further execution & expose message string on catch the error.

try {   throw "I'm Evil"   console.log("You'll never reach to me", 123465) } catch (e) {   console.log(e); // I'm Evil }

Console after throw will never be reached cause of termination.


throw new Error("I'm Evil")

throw new Error exposes an error event with two params name & message. It also terminate further execution

try {   throw new Error("I'm Evil")   console.log("You'll never reach to me", 123465) } catch (e) {   console.log(e.name, e.message); // Error I'm Evil }

throw Error("I'm Evil")

And just for completeness, this works also, though is not technically the correct way to do it -

try {   throw Error("I'm Evil")   console.log("You'll never reach to me", 123465) } catch (e) {   console.log(e.name, e.message); // Error I'm Evil }  console.log(typeof(new Error("hello"))) // object console.log(typeof(Error)) // function
like image 45
Nishchit Avatar answered Sep 24 '22 23:09

Nishchit