• js中try...catch和finally的用法


    定义和用法:
    try/catch/finally 语句用于处理代码中可能出现的错误信息。
    错误可能是语法错误,通常是程序员造成的编码错误或错别字。也可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。

    try语句允许我们定义在执行时进行错误测试的代码块
    catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块
    finally 语句在 try 和 catch 之后无论有无异常都会执行
    注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。

    try {
        tryCode - 尝试执行代码块 // 如果出错,抛出错误
    }
    catch(err) {
        catchCode - 捕获错误的代码块
    }
    finally {
        finallyCode - 无论 try / catch 结果如何都会执行的代码块
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throw 和 try 、 catch一起使用,就可以控制程序输出的错误信息。
    比如:如果值是错误的,会抛出一个异常(错误)。catch 会捕捉到这个错误,并显示一段自定义的错误消息:

    var obj = {name: 'sun'};
    try {
        if(!obj.age) throw 'age不存在'
    } catch(err) {
     	console.log("错误信息:" + err);
    }
    // 错误信息:age不存在
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行流程:
    先执行try里面的代码,如果try里面的代码有错误,就执行catch里面的代码,否则不执行catch里面的代码
    下面是一个例子:

    var obj = {name: 'sun'};
    try {
    	console.log(obj.age.msg)
    } catch(err) {
     	console.log("错误信息:" + err.message);
    }
    // 错误信息:Cannot read properties of undefined (reading 'msg')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    用途:一般用于可控的错误,而不是未知的错误,意思就是你很清楚这里可能出错,而且你很清楚什么前提下会出错,你就是要故意利用报错信息来区分错误,就可以把这段代码放进try内,然后出错误的时候就会自动去执行catch里面的代码。
    场景:
    1.浏览器兼容问题
    每个浏览器都有自身的兼容问题,所以try catch能很好的将异常捕获,每个浏览器的异常报错提示也是不一样的,我们就可以在catch里面将报错抛出并作出对应的措施。

    2.判断代码非法性

    try{
    	console.log(sun)
    }
    catch(e){
    	console.log('捕获到异常:',e); 
    }
    // 捕获到异常: ReferenceError: sun is not defined
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:合法判断不会走catch
    比如:

    try{
    	1===2
    }
    catch{
    	console.log("不执行")
    }
    // false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.try catch只能捕捉到同步的异常,异步的异常无法捕获

    try{
    	setTimeout(()=>{
    		console.log(sun)
    	},1000)
    }
    catch(e){
    	console.log('捕获到异常:',e); 
    }
    // 报错:Uncaught ReferenceError: sun is not defined
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    思考:面试的时候面试官问到了怎么终止forEach的循环
    答案: 在这里插入图片描述用try…catch

  • 相关阅读:
    备战蓝桥杯---图论基础理论
    shell清理日志,通过mtime筛选文件时间
    国家矿山安全监察局关于露天矿山边坡监测系统建设及预警响应要求
    25分钟了解命令执行漏洞【例题+详细讲解】(一)
    Java --- JVM之垃圾回收相关知识概念
    MySQL-InnoDB引擎-架构和事务原理
    python文件打包成可执行文件exe的两种方法
    揭示隐藏的模式:秩和检验和单因素方差分析的实战指南【考题】
    使用客户端jedis时报错Could not get a resource from the pool 以及使用Spring Data Redis报错解决方法
    ChunJun: 自定义插件
  • 原文地址:https://blog.csdn.net/weixin_46074961/article/details/126155227