TypeScript异常处理

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

相关推荐
Acro6 分钟前
快给macOS 上的Grok Bot换一套皮肤
前端
flash俊杰8 分钟前
双引擎 OCR 编排:逐页判定、视觉优先、partial 语义与三层超时
前端
计算机魔术师9 分钟前
Reddit 每周被 Google 偷走 100 万次点击,CEO 摊牌了
前端
前端繁华如梦10 分钟前
用 React Three Fiber 做一栋能编辑的教学楼数字孪生
前端
前端繁华如梦15 分钟前
用 React Three Fiber 做一套智慧医院数字孪生:编辑器、大屏和 BIM 浏览器
前端
俊昭喜喜里2 小时前
理解全局跨域CORS配置
前端
香芋芋圆2 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
二哈赛车手3 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
晗夜未央4 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
锋行天下4 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端