温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript如何自定义异常

发布时间:2021-12-02 11:42:49 来源:亿速云 阅读:485 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关JavaScript如何自定义异常的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1.概念

1.1什么是错误与异常

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

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

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

1.2异常的分类

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

  • 逻辑错误:逻辑错误是最难被追踪的错误类型。这些错误是由于程序运行的逻辑上出现错误,从而导致你的脚本程序并不能得到你想要的结果。

  • JavaScript自带错误:这是最为常见的错误类型,例如发生JavaScript的语法错误、代码引用错误、类型错误等,JavaScript的引擎都会自动触发这些错误。

  • 开发者主动抛出的错误:一般都是开发者为了满足自己的需求所定义出的错误

2.异常处理

2.1try...catch语句

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

try {
     // 供测试的代码块
}
 catch(err) {
     // 处理错误的代码块
}

参数:

  • try:语句允许您定义一个代码块,以便在执行时检测错误。

  • catch:语句允许你定义一个要执行的代码块,如果try代码块中发生错误将会执行此代码块

  • err:一个标识符,此标识符表示一个Error对象,错误的类型与测试代码块中的错误与之对应。

示例代码如下所示:

try {
  // 用于测试有没有出错的代码块
  console.log(v) // 此时v没有定义将会抛出异常
} catch (error) {
  // 抛出异常将执行此代码块
  console.log('上述代码有错误')
}

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

2.2finally语句

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

语法结构如下所示:

try {
     // 供测试的代码块
}
 catch(err) {
     // 处理错误的代码块
}  
finally {
     // 无论 try  catch 结果如何都执行的代码块
}

示例代码如下所示:

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

2.3throw语句

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

语法格式如下:

throw expression;

expression:要抛出的表达式

使用throw语句来抛出一个异常。当你抛出异常时,expression指定了异常的内容。

示例代码如下所示:

// throw "错误"  // 输出 错误
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对象的实例语法格式如下所示:

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属性

示例代码如下:

function MyError(message) {
  this.message = message
  this.name = 'MyError'
  /*
   * Error.captureStackTrace(targetObject[, constructorOpt])
   * 参数 targetObject -> 表示一个对象
   * 参数 constructorOpt -> 表示对象的构造函数
   * 在targetObject上创建一个.stack属性, 调用是返回一个调用 Error.captureStackTrace() 的位置的字符串。
   */
  Error.captureStackTrace(this, MyError)
}

MyError.prototype = new Error()
MyError.prototype.constructor = MyError

// * 在node.js 环境中 new Error 会直接抛出异常 不适用于 node.js环境
// function MyError(message) {
//   this.name = 'MyError';
//   this.message = message || 'Default Message';
//   this.stack = (new Error()).stack;
// }
// MyError.prototype = Object.create(Error.prototype);
// MyError.prototype.constructor = MyError;

try {
  throw new MyError('错了')
} catch (e) {
  console.log(e)
}

感谢各位的阅读!关于“JavaScript如何自定义异常”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI