理解js中的异常捕获处理机制

本文详细介绍了JavaScript中的异常处理机制,包括Error对象、throw语句用于主动抛出异常,以及try...catch...finally语句块的使用方法。通过示例展示了如何捕获和处理异常,强调了在使用异常处理时应注意的事项,如尽量减少try中的语句数量以及在预知错误类型的情况下使用if...else...替代try...catch。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

js中异常(exception)与捕获

1、Error对象

2、throw

3、异常处理机制 (try…catch…finally)

4、使用异常处理需要注意的问题


js中异常(exception)与捕获

代码在运行过程中得到的中间结果与预期的结果不一致,就是异常。一般运行环境会抛出一个提示对象,中断程序运行,这个就是异常机制。换句话说,就是在程序执行过程中,即使程序出错,也能保证不会异常中断的机制。其中包括Error对象、使用throw语句抛出异常、(try...catch...finally语句)、等。

 

1、Error对象

try...catch...finally语句中的catch通常捕捉到的对象为Error对象,当运行JavaScript代码时,如果产生了错误或者异常,JavaScript就会生成一个Error对象的实例来描述错误。该实例包含了一些特定的错误信息。

Error:封装错误信息的对象,在发生错误时,自动创建,有两个属性:

err.name :错误的名称/错误的类型

err.message: 错误的提示信息

 

2、throw

有些JavaScript代码没有语法上的错误,但是存在逻辑错误,对于这种错误,JavaScript不会抛出异常,这时候我们可以自己定义一个error对象的实例,并使用throw语句来主动抛出异常。在程序中我们可以通过使用throw语句有目的的抛出异常,其语法格式如下。

throw new Error("errorstatements")

参数说明:throw:抛出异常关键字

throw exception
异常可以是 JavaScript 字符串、数字、逻辑值或对象

 var a=5;
 if(a==5){
 	throw new Error("输入5会出错!")
 }

程序不会执行,控制台提示Uncaught Error,结果如下: 

那么如何去捕获异常呢?这时候就要用到异常处理机制 (try…catch…finally)

3、异常处理机制 (try…catch…finally)

try一旦捕获到异常就要交给catch块进行处理,catch里面有一个封装了错误信息的对象,主要是负责输出错误信息。

 如下面例子中,要求用户输入一个偶数,对用户输入的数字进行判断,如果不是偶数,则抛出异常;是偶数则除以2输出; 

//先将疑似错误的代码段放入try,一旦出现错误则其他语句不能执行;	
 
 try{
	var num=prompt("请输入一个偶数:");
	if(num%2!=0){
 		 throw new Error("出错啦,输入的不是偶数");//使用throw语句来主动抛出异常。
 	}else{
 		 console.log("输出该偶×2的值="+num/2);//若输入偶数则输出num/2
 	 }
  }

//try 中的语句发生错误,则执行 catch中的语句
 catch(e){
     console.log("错误信息:"+e.message);  
 }

//不管try中有没有错误,catch有没有执行,最后一定会执行finally的后期处理代码
 finally{
     console.log("不管代码有没有出现异常,我都会执行。");
 }

运行结果为:
       第一种情况:输入偶数

我们可以看到,这里程序正常执行,没有捕获到异常,finally语句也要执行。

第二种情况:输入奇数

这里捕捉到异常,并执行了catch和finally中的语句 。

执行步骤:

分析可知,当try语句块中包含的语句出现错误的时候,跳出try语句执行catch语句块中的内容,然后如果存在finally语句块,则最后执行finally语句块中的内容。

4、使用异常处理需要注意的问题

(1)try中尽量少的包含语句 

原因是因为,try语句要经过计算机的检测看看是否是错误的语句,如果是错误的语句则会执行catch里面的语句,如果try的语句过多的话,计算机处理速度就会变慢,影响程序的执行。

(2)如果已经提前预知错误的类型,就用if...else...来代替try...catch

除掉错误预知的这个前提下,if..else..的用法与try...catch...的用法是基本相同的,严格意义来说,if..else..的可读性比try..catch..更强,语句理解能力也更好,开发人员与用户更加倾向于使用if..else.. 但是如果无法判断语句是否正确的话,仍然使用try..catch...会更加严密。就如同前面判断偶数的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值