从根本上来说,异常就是一个数据结构,它存了异常发生时相关信息,譬如错误码、错误信息等。其中 message 属性是唯一一个能够保证所有浏览器都支持的属性,除此之外,IE、Firefox、Safari、Chrome 以及 Opera 都为事件对象添加了其它相关信息。譬如 IE 添加了与 message 属性完全相同的 description 属性,还添加了保存这内部错误数量的 number 属性。Firefox 添加了 fileName、lineNumber 和 stack(包含堆栈属性)。所以,在考虑浏览器兼容性时,最好还是只使用 message 属性。

    执行 JS 期间可能会发生的错误有很多类型。每种错误都有对应的错误类型,而当错误发生的时候就会抛出响应的错误对象。ECMA-262 中定义了下列 7 种错误类型:

    • Error:错误的基类,其他错误都继承自该类型
    • EvalError:Eval 函数执行异常
    • RangeError:数组越界
    • ReferenceError:尝试引用一个未被定义的变量时,将会抛出此异常
    • SyntaxError:语法解析不合理
    • TypeError:类型错误,用来表示值的类型非预期类型时发生的错误
    • URIError:以一种错误的方式使用全局 URI 处理函数而产生的错误