I've been spending some time lately studying JavaScript's Error object. These are some of my notes on Error object compatibility across browsers, in case anyone else finds this useful.
| Property | Google Chrome | Safari | Opera | Firefox | MSIE |
|---|---|---|---|---|---|
| name | Yes | Yes | Yes | Yes | Yes |
| message | Yes | Yes | Yes | Yes | Yes |
| stack | Yes | Yes | Yes | Yes | Yes (IE10+) |
| toString() | Yes | Yes | Yes | Yes | Yes |
| type | Yes | No | No | No | No |
| columnNumber | No | No | No | Yes | No |
| fileName | No | No | No | Yes | No |
| sourceURL | No | Yes | No | No | No |
| line | No | Yes | No | No | No |
| lineNumber | No | No | No | Yes | No |
| number | No | No | No | No | Yes |
Notes:
- Though file name is available in the
.stackproperty, only Firefox and Safari provide this as an explicit property, and that too with different property names (FF:.fileName, Safari:.sourceURL). - All browsers string-format the stack subtly differently. There's no standard regarding stack formatting. Firefox has the least informative stack property. I'm going to cut Firefox some slack though, since they were the first to expose this property. That said, this might change in the future. Worth keeping an eye on this discussion.
- Firefox doesn't provide column numbers in the stack at all. However, it does provide a
.columnNumberproperty which is only useful for the first stack frame. - The
.numberproperty (IE) is practically useless. It points to IE's internal representation of errors. .line(Safari) and.lineNumber(Firefox) properties give the line number of the first stack frame of the error. No one else provides a similar property, though this data is available in the.stackeverywhere except Firefox.- The
.toString()formatting seems consistent, and similar to the formatting of the error message inwindow.onerror. That is, it uses the formatname + ": " + message. The only exception to this, of course, is thatwindow.onerrorformats errors differently when the source file has x-domain restrictions. - Column numbers in the
.stackproperty are only available in IE10+ and Chrome. Opera provides a.stacktraceproperty in addition to.stackthat has column numbers (go figure!). No other browser provides column numbers in the stack trace. As mentioned above, Firefox does provide an explicit.columnNumberproperty that's only useful for the first stack frame. - No stack support for IE<10. Nothing. Zilch.