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?
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.
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.
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.
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.
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
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 }
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With