什么's抛出非Error对象的用例

What's the use case for throwing a non-Error object?

本文关键字:对象 Error 什么      更新时间:2023-09-26

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

为什么要抛出一个非Error实例?我指的不是从Error继承的对象——我指的是其他随机对象或基元。

throw只是抛出一个任意表达式。它没有以任何方式连接到Error对象;您可以throw任何表达式。

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

评估错误
创建一个实例,表示全局函数eval()发生的错误。

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

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

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

语法错误
创建一个实例,表示在分析eval()中的代码时发生的语法错误。

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

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

所有这些对象通常都继承自Error对象,因此,虽然抛出任何任意对象都是合法的,但抛出Error对象或继承自Error的对象可能更有意义,就像Javascript本身一样。

在这个MDN页面上有几个正确方法的例子。