在JavaScript中所有的异常都是Error对象,遇到异常就会抛出一个Error对象,这个对象中包含错误的描述信息,通过JavaScript提供的异常处理语句,我们可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离,需要的朋友可以参考一下
目录
1.概念
1.1什么是错误与异常
1.2异常的分类
2.异常处理
2.1try…catch语句
2.2finally语句
2.3throw语句
3.Error对象
3.1自定义异常类型
前言:
在我们的实际编程中,抛出异常(代码报错)是最正常不过的,但是怎么处理异常这就要因人而异的,有的人遇到异常,通常会通过某种办法解决这个异常或者将其隐藏;但是在JavaScript中提供了一套完整的处理异常的机制,使程序遇到异常还可以正确的执行。所以说异常处理的在实际应用的重要性是毋庸置疑的,一个完整的Web应用肯定有一套完整的异常处理机制。

这篇文章我们来介绍一下JavaScript处理

1.概念

1.1什么是错误与异常
所谓的错误就是编程的过程中使程序不能正常运行的状态,也称为异常。

在JavaScript中所有的异常都是Error对象,遇到异常就会抛出一个Error对象,这个对象中包含错误的描述信息。

通过JavaScript提供的异常处理语句,我们可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。

1.2异常的分类
在实际的开发中,异常可以主要分为以下三种:

逻辑错误:逻辑错误是最难被追踪的错误类型。这些错误是由于程序运行的逻辑上出现错误,从而导致你的脚本程序并不能得到你想要的结果。
JavaScript自带错误:这是最为常见的错误类型,例如发生JavaScript的语法错误、代码引用错误、类型错误等,JavaScript的引擎都会自动触发这些错误。
开发者主动抛出的错误:一般都是开发者为了满足自己的需求所定义出的错误

2.异常处理

2.1try…catch语句
try…catch语句是JavaScript中处理异常的一种标准方式,语法结构如下所示:

  1. try {
  2. // 供测试的代码块
  3. }
  4. catch(err) {
  5. // 处理错误的代码块
  6. }

值得注意的是try和catch语句是成对出现的

2.2finally语句
finally语句又称为终结块,此语句块会在try和catch语句结束之后执行,无论结果是否报错。

语法结构如下所示:

  1. try {
  2. // 供测试的代码块
  3. }
  4. catch(err) {
  5. // 处理错误的代码块
  6. }
  7. finally {
  8. // 无论 try catch 结果如何都执行的代码块
  9. }

示例代码如下所示:

  1. // var v
  2. try {
  3. // 用于测试有没有出错的代码块
  4. console.log(v) // 此时v没有定义将会抛出异常
  5. } catch (error) {
  6. // 抛出异常将执行此代码块
  7. console.log('上述代码有错误')
  8. } finally {
  9. console.log('我必须被执行')
  10. }

2.3throw语句
throw**语句用来抛出一个用户自定义的异常。此异常可以是任何数据类型。当执行throw语句时,当前执行将会被停止,如果有catch块,则会执行catch块,否则将跳出循环。

语法格式如下:

1
throw expression;
expression:要抛出的表达式
使用throw语句来抛出一个异常。当你抛出异常时,expression指定了异常的内容。

示例代码如下所示:

  1. // throw "错误" // 输出 错误
  2. throw false // 输出 false

当然,throw后面也可以是一个对象

3.Error对象
通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。一般情况下Error类型的错误很少见,基本都是其他错误类型的,但是其他错误类型都是继承于Error的。

Error对象主要用于用户自定义的异常的基础对象。

除了Error对象外,JavaScript还提供了如下几种预定义类型的错误
错误名 描述
EvalError 已在eval()函数中发生的错误
RangeError 已发生超出数字范围的错误
ReferenceError 已发生非法引用
SyntaxError 已发生语法错误
TypeError 已发生类型错误
URIError 在encodeURI()中已发生的错误
Error的属性主要有如下两个:

属性 描述
name 设置或返回错误名
message 设置或返回错误消息(一条字符串)
创建Error对象的实例语法格式如下所示:

  1. new Error([message)

参数:

message:可选,描述的错误信息
其他预定义类型的创建语法与Error相同

3.1自定义异常类型
如果JavaScript提供的异常类型不能够满足我们,我们可以自定义属于自己的异常类型,这个自定义的异常类型一般都是继承Error的异常类型,而且可以通过instanceof关键字来表示属于那种异常类型。

先来看一下Node.js中提供的用于自定义异常类型所提供的属性和方法,

如下所示:

error.stack:属性:返回一个字符串,字符串的第一行会被格式化为<error class name>: <error message>,且带上一系列栈帧(每一行都以”at “开头)。每一帧描述了一个代码中导致错误生成的调用点。
Error.captureStackTrace(targetObject[, constructorOpt])方法:targetObject表示一个对象,constructorOpt表示对象的构造函数。作用:在targetObject上创建一个.stack属性
示例代码如下:

  1. function MyError(message) {
  2. this.message = message
  3. this.name = 'MyError'
  4. /*
  5. * Error.captureStackTrace(targetObject[, constructorOpt])
  6. * 参数 targetObject -> 表示一个对象
  7. * 参数 constructorOpt -> 表示对象的构造函数
  8. * 在targetObject上创建一个.stack属性, 调用是返回一个调用 Error.captureStackTrace() 的位置的字符串。
  9. */
  10. Error.captureStackTrace(this, MyError)
  11. }
  12. MyError.prototype = new Error()
  13. MyError.prototype.constructor = MyError
  14. // * 在node.js 环境中 new Error 会直接抛出异常 不适用于 node.js环境
  15. // function MyError(message) {
  16. // this.name = 'MyError';
  17. // this.message = message || 'Default Message';
  18. // this.stack = (new Error()).stack;
  19. // }
  20. // MyError.prototype = Object.create(Error.prototype);
  21. // MyError.prototype.constructor = MyError;
  22. try {
  23. throw new MyError('错了')
  24. } catch (e) {
  25. console.log(e)
  26. }

结语:
JavaScript 中的异常处理,在实际的开发中一般只做两件事情:

将异常改为提示信息
将异常输出到异常日志中查看错误信息。

更多相关文章

  1. github的clone有安装不了依赖的问题错误代码128,设置GitHub代理
  2. JavaScript简单计算器
  3. 从 SQL 到 MongoDB,这一篇就够了
  4. 我去,你写的 switch 语句也太老土了吧
  5. 循环语句 超级全局变量 及 cURL函数
  6. Elasticsearch Query DSL 整理总结
  7. 如何优雅的捕获所有异步 error?
  8. 数据持久化框架为什么放弃 Hibernate、JPA、Mybatis,最终选择 JDB
  9. 你向 MySQL 数据库插入 100w 条数据用了多久?

随机推荐

  1. Android消息处理机制2——Message
  2. Android Tab切换表格头
  3. android 来电自动接听和自动挂断
  4. Android之OnGestureListener实现图片的左
  5. Android获取、设置桌面
  6. 常用的android弹出对话框
  7. 2014.01.16(2) ——— android 关于适配的
  8. Android存储之SharedPreferences和File
  9. [gitbook] Android框架分析系列之Android
  10. Android电话秀(三)