开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
导入
你可以用 throw 语句抛出一个异常并且用 try...catch 语句捕获处理它。
工作时遇到了需要抛出异常并且需要自己捕获处理的地方,于是在抛出的地方写下
function xxxFn() {
try{
// ....
// throw new Error('msg信息')
// throw error
} catch (e) {
console.log(e.message)
console.log(e)
} finally {
// ....
}
}
throw new Error('msg信息') 和throw error
throw new Error(); 这个是创建错误,创造一个错误类型抛出
throw error 这个是抛出错误。
throw语句
throw语句的作用是手动中断程序执行,抛出一个错误。
使用throw语句抛出一个异常。当需要抛出异常时,规定一个含有值的表达式要被抛出。
throw expression;
可以是一下类型
throw "Error2"; // String type
throw 42; // Number type
throw true; // Boolean type
throw {toString: function() { return "I'm an object!"; } };
也可以是一个对象。例如 new Error
Error实例对象
JavaScript 原生提供
Error构造函数,所有抛出的错误都是这个构造函数的实例。
Error实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象。
| 错误对象 | 描述 | 样例 |
|---|---|---|
| SyntaxError 对象 | SyntaxError对象是解析代码时发生的语法错误。 | Uncaught SyntaxError: Unexpected string |
| ReferenceError 对象 | ReferenceError对象是引用一个不存在的变量时发生的错误。 | Uncaught ReferenceError: unknownVariable is not defined |
| RangeError 对象 | angeError对象是一个值超出有效范围时发生的错误。 | Uncaught RangeError: Invalid array length |
| TypeError 对象 | TypeError对象是变量或参数不是预期类型时发生的错误。 | Uncaught TypeError: number is not a func |
| URIError 对象 | URIError对象是 URI 相关函数的参数不正确时抛出的错误。 | URIError: URI malformed |
| EvalError 对象 | eval函数没有被正确执行时,会抛出EvalError错误。 |
throw new Error()
这样的实例化写法,这样的写法是很规范的,是js规范所推崇的。但是需要注意的是,throw出去的是一个Error对象。不建议直接throw一个字符串
throw 'error msg'
- throw出去的是一个Error对象,包含:name、message属性。 name:用来存储错误的类型,在ECMA-262定义了七种错误类型:Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。详情见:try-catch语句
- message:用来存储error message,就是你new Error()时候穿进去的参数
try...catch...finally
try...catch语句有一个包含一条或者多条语句的 try 代码块,0 个或 1 个的catch代码块,catch 代码块中的语句会在 try 代码块中抛出异常时执行。
- try执行代码逻辑,
- catch对try模块的错误进行监控,如果有错误信息,会进入catch模块;
finally块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally块里的语句也会执行。
总结
认识js原生的错误类型Error构造函数;抛出错误类型的throw;以及处理代码错的try/catch/finally。