w3schools says that exceptions can be strings, integers, booleans, or objects, but the example given doesn\'t strike me as good practice, since exception type checking is do
Section 15.11 of the ECMA-262 specification defines several Error
types which "are thrown as exceptions when runtime errors occur... [they] may also serve as base objects for user-defined exception classes." That spec also defines six other error types which are part of the language.
It does seem preferable to throw exceptions of these types (or types derived from them) since it is easier to determine their type; they also have a built-in message property.
In my own experience, try/catch blocks are somewhat rare and feel truly exceptional as opposed to being unavoidable as in Java.