在JS中,您可以throw new Error()
,throw 'foo'
甚至throw null
。
为什么要抛出非Error
实例?我不是指继承自Error
的对象 - 我的意思是其他随机对象或基元。
答案 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处有几个正确方法的例子。