js中如何异常捕获

196 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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'
  1. throw出去的是一个Error对象,包含:name、message属性。 name:用来存储错误的类型,在ECMA-262定义了七种错误类型:Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。详情见:try-catch语句
  2. message:用来存储error message,就是你new Error()时候穿进去的参数

try...catch...finally

try...catch 语句有一个包含一条或者多条语句的 try 代码块,0 个或 1 个的catch代码块,catch 代码块中的语句会在 try 代码块中抛出异常时执行。

  1. try执行代码逻辑,
  2. catch对try模块的错误进行监控,如果有错误信息,会进入catch模块;
  3. finally块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally块里的语句也会执行。

总结

认识js原生的错误类型Error构造函数;抛出错误类型的throw;以及处理代码错的try/catch/finally。