1.异常的概念
程序运行中意外发生的情况就成为异常
例子:
javascript
//除法运算
function chu(num1:number,num2:number){
if(num2==0){
//throw 抛出异常
throw new Error('除数不能为零')
}
let num:number=num1/num2
console.log(num)
}
//程序出现异常后会停止运行
// 捕获异常
try{ //尝试执行有可能有异常的代码块
chu(1,0)
} catch(error){ //对异常进行处理
console.log(error)
}
chu(1,1)
运行结果:
运行讲解:
当我们知道除数不能为0,为了避免程序中出现错误,我们就判断一下除数是否为0,如果为0就抛出异常,但是如果抛出异常没有处理,程序就会停止运行,为了避免异常导致程序停止运行,就需要捕获异常,try{} catch(error){}
try:尝试执行有可能有异常的代码
catch():对异常进行处理
这是我们模拟了一下错误,让try去执行代码,此时捕获到错误了,就交给了catch处理,
这里处理的结果是打印错误提示,而这个错误提示又是抛出异常的提示词,所以异常为除数不能为零,但是不影响底下代码正常运行。
2.finally的概念
finally是异常的最终解决方案,无论是否出现异常都要执行里面的代码
案例:模拟输入一个年龄,输完年龄之后,提示输入成功
(条件:不管是不是出现异常都需要提示成功)
javascript
let num:string='12'
// 转换年龄
function getNum(num:string):number{
if(parseInt(num)){
return parseInt(num)
}else{
throw new Error('年龄输入错误')
}
}
function ts(){
try {
console.log('模拟输入的值为:'+num);
let age=getNum(num)
console.log('年龄是:'+age);
} catch (error) {
}finally{
// 异常的最终解决方案
//finally无论是否出现异常都要执行
console.log('输入成功');
}
}
ts()
运行结果:
无异常运行结果 发现异常运行结果
运行讲解:
模拟输入年龄,年龄都是数字类型,年龄中出现字母则出现异常,我们就需要解决这一问题,就需要抛出异常,抛出异常就会影响下面代码正常运行,所以我们需要捕获一下异常,finally是异常的最终解决方案,无论是否出现异常都要执行,这样就可以完成我们上述的需求。
3.return和finally的执行顺序
javascript
function aa(){
try{
//异常代码
return 123
} catch(e){
return 456
}finally{
console.log('567');
}
}
let a=aa()
console.log(a);
思考上述代码是如何执行的?
运行结果:
运行分析:
先执行finally,然后再执行return ,原因:finally无论是否异常都会执行的,当try没有异常有return的时候,会先执行完filally之后在执行return