在JavaScript中使用自定义错误而不仅仅是字符串的好理由是什么?
通常,当我想编写自定义异常时,这是因为我想以优雅的方式触发、捕获和处理已知条件。是否有任何不利因素可以避免所有仪式,只需执行以下操作:在JavaScript中使用自定义错误而不仅仅是字符串的好理由是什么?,javascript,Javascript,通常,当我想编写自定义异常时,这是因为我想以优雅的方式触发、捕获和处理已知条件。是否有任何不利因素可以避免所有仪式,只需执行以下操作: const ERROR_OOPS = "oops" try { throw ERROR_OOPS; } catch (error) { if (error === ERROR_OOPS) { // handle oops case return; } // handle other err
const ERROR_OOPS = "oops"
try {
throw ERROR_OOPS;
} catch (error) {
if (error === ERROR_OOPS) {
// handle oops case
return;
}
// handle other errors
}
两个可能会考虑自定义错误的场合:
你的问题涉及多个方面。诚然,这都是错误处理的一部分,但它涉及到错误的传递方式(
返回
vs抛出
),对象类型错误(错误
,错误的自定义子类,字符串/非错误对象)以及可能的其他方面。你的问题总是涉及到意见的回答。我的观点是,只要代码可读,这并不重要。也就是说,我更喜欢使用异常,从不返回错误。您也很少需要记录错误,通常是捕获错误的一部分,否则会自动记录错误。如果您只是抛出一个字符串作为错误消息,那么这就是您所需要的,但自定义错误对象允许您附加更多信息。与必须使用if-else链捕获错误对象和您自己的字符串相比,执行切换(typeof error)
来处理多个错误也更为简洁。typeof error
不会返回它们实际的错误类,它将生成“object”
。您可以执行开关(error.constructor)
,但它有自己的问题。另外,如果您想附加信息,抛出一个用文本({…}
)定义的对象也可以。这就是为什么我说只要代码被他们的同龄人理解就没有多大关系。如果你上面发布的内容不是对你的问题的回答——我也不完全确定是否是——那么我建议你将内容整合到问题中。至于您所说的,对象文字根本不会让识别错误变得棘手,您完全可以切换错误对象属性。无论你抛出什么
,都几乎可以保证它是一个对象。堆栈跟踪可用于大多数JavaScript运行时,至少在运行调试器时是如此。