Throwing strings instead of Errors
Yes, you can throw other values, but it's not a good practice.
Does anyone know any catch in this?
A string is not an error object, and does not convey any useful debugging information. Devtools rely on that, such as the file and line where the error was created, the stacktrace at the throw
location etc, which are available as properties on Error
objects.
Whenever you think of throwing a primitive string value, throw a new Error("<the string>")
instead.
While it is okay possible to throw any value, it is generally considered poor form to throw anything other than an instance of Error
or one of its subclasses. There are several reasons for this:
- Catching code may expect the thrown object to have the usual
message
,stacktrace
, andname
properties that appear onError
s. - Lack of a stacktrace makes debugging problematic, especially in the case of uncaught exceptions / unhandled rejections. E.g. Debugging an "Uncaught [Object object]" error can be particularly painful.