reason was always wrong, that was a CouchDB thing, the error object will not have a reason property, in JavaScript errors have name and message properties, in V8 (chrome and node) it is easy to make custom errors with stack traces, and moderately easy to do so in firefox but in any other browser it wont' really work (based on research I've done trying to fix them).

it isn't all that suprising that you are confused, much of the issues date back to stuff others did when they were confused.