ECMAScript 2021 引入了一些新的 error 类,这些类可以帮助我们更好地处理异常。在本文中,我们将探讨这些新的 error 类以及如何使用它们来处理异常。
Error 类
在 JavaScript 中,所有的异常都是通过 Error 类来表示的。ECMAScript 2021 中,Error 类有一些新的方法和属性。
stack 属性
Error 类的 stack 属性代表了异常发生时的堆栈信息。这个属性在调试时非常有用。
try { throw new Error('Something went wrong'); } catch (e) { console.log(e.stack); }
输出:
Error: Something went wrong at <anonymous>:2:9 at Object.InjectedScript._evaluateOn (<anonymous>:905:140) at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34) at Object.InjectedScript.evaluate (<anonymous>:694:21)
captureStackTrace() 方法
captureStackTrace() 方法可以用来控制堆栈信息的生成。我们可以使用这个方法来创建一个自定义的 Error 类,这个类只包含我们需要的信息。
-- -------------------- ---- ------- ----- ------- ------- ----- - -------------------- - --------------- ----------------------------- --------- - - --- - ----- --- ------------------ ---- -------- - ----- --- - --------------------- -
输出:
MyError: Something went wrong at <anonymous>:5:9
from() 方法
from() 方法可以将任何一个对象转换成 Error 对象。这个方法非常有用,可以将任何一个对象转换成一个异常,方便我们进行异常处理。
const obj = { message: 'Something went wrong' }; const error = Error.from(obj); console.log(error.message);
输出:
Something went wrong
EvalError 类
EvalError 类继承自 Error 类,表示一个与 eval() 相关的异常。在 ECMAScript 2021 中,EvalError 类已经被废弃了,不再被使用。
RangeError 类
RangeError 类继承自 Error 类,表示一个超出范围的异常。在 ECMAScript 2021 中,RangeError 类有一个新的属性:code。
code 属性
code 属性代表了异常的类型。在 RangeError 类中,code 属性的值为 'ERR_OUT_OF_RANGE'。
try { throw new RangeError('Value must be between 1 and 10'); } catch (e) { console.log(e.code); }
输出:
ERR_OUT_OF_RANGE
ReferenceError 类
ReferenceError 类继承自 Error 类,表示一个引用错误异常。在 ECMAScript 2021 中,ReferenceError 类有一个新的属性:code。
code 属性
code 属性代表了异常的类型。在 ReferenceError 类中,code 属性的值为 'ERR_UNDEFINED_IDENTIFIER'。
try { const result = someUndefinedVariable; } catch (e) { console.log(e.code); }
输出:
ERR_UNDEFINED_IDENTIFIER
SyntaxError 类
SyntaxError 类继承自 Error 类,表示一个语法错误异常。在 ECMAScript 2021 中,SyntaxError 类有一个新的属性:code。
code 属性
code 属性代表了异常的类型。在 SyntaxError 类中,code 属性的值为 'ERR_INVALID_CHAR'。
try { eval('const result = ;'); } catch (e) { console.log(e.code); }
输出:
ERR_INVALID_CHAR
TypeError 类
TypeError 类继承自 Error 类,表示一个类型错误异常。在 ECMAScript 2021 中,TypeError 类有一个新的属性:code。
code 属性
code 属性代表了异常的类型。在 TypeError 类中,code 属性的值为 'ERR_INVALID_ARG_TYPE'。
-- -------------------- ---- ------- -------- ------ -- - -- ------- - --- -------- -- ------ - --- --------- - ----- --- --------------- --------- ---- -- ---------- - ------ - - -- - --- - ----- ------ - ------ ----- - ----- --- - -------------------- -
输出:
ERR_INVALID_ARG_TYPE
Conclusion
在本文中,我们探讨了 ECMAScript 2021 中的 error 类和异常处理。通过使用这些新的 error 类,我们可以更好地处理异常,并且可以更加精确地指定异常类型。如果你还没有使用这些新的 error 类,那么现在就是时候开始使用了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d3534ca941bf71346481be