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 类,这个类只包含我们需要的信息。
// www.javascriptcn.com code example
class MyError extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, MyError);
}
}
try {
throw new MyError('Something went wrong');
} catch (e) {
console.log(e.stack);
}输出:
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'。
// www.javascriptcn.com code example
function sum(a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('Both arguments must be numbers');
}
return a + b;
}
try {
const result = sum(1, '2');
} catch (e) {
console.log(e.code);
}输出:
ERR_INVALID_ARG_TYPE
Conclusion
在本文中,我们探讨了 ECMAScript 2021 中的 error 类和异常处理。通过使用这些新的 error 类,我们可以更好地处理异常,并且可以更加精确地指定异常类型。如果你还没有使用这些新的 error 类,那么现在就是时候开始使用了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d3534ca941bf71346481be