抛出非Error对象的用例是什么?

时间:2015-06-30 02:56:11

标签: javascript error-handling exception-handling

在JS中,您可以throw new Error()throw 'foo'甚至throw null

为什么要抛出非Error实例?我不是指继承自Error的对象 - 我的意思是其他随机对象或基元。

1 个答案:

答案 0 :(得分:2)

throw只是throws an arbitrary expression。它没有以任何方式连接到Error object;你可以throw任何表达。

但是从Error对象继承可能是个更好的主意,这正是其他标准内置错误所做的:

EvalError
创建一个表示有关全局函数eval()的错误的实例。

InternalError 创建一个实例,表示在引发JavaScript引擎中的内部错误时发生的错误。例如。 "过多的递归"。

RangeError
创建一个实例,表示当数字变量或参数超出其有效范围时发生的错误。

ReferenceError
创建表示取消引用无效引用时发生的错误的实例。

SyntaxError
创建表示在解析eval()中的代码时发生的语法错误的实例。

TypeError
创建一个实例,表示当变量或参数不是有效类型时发生的错误。

URIError
创建一个实例,表示在encodeURI()或decodeURI()传递无效参数时发生的错误。

所有这些对象原型都是从Error对象继承的,所以虽然抛出任意对象是合法的,但抛出Error对象或从Error继承的对象可能更有意义,就像Javascript本身一样确实

this MDN page处有几个正确方法的例子。