• 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

  • 相关阅读:
    如何实现对亚马逊网站产品搜索结果网页中自动上下页的翻页
    Java项目防止SQL注入的几种方案
    HACKTHEBOX——Shocker
    数字化门店转型| 舞蹈室管理系统| 门店小程序开发教程
    无主复制系统(2)-读修复和反熵
    @RabbitListener和@RabbitHandler的使用
    《前端运维》四、Jenkins--持续构建
    一文看懂云计算和大数据到底是什么!
    【冰糖Python】python并行化-multiprocessing,joblib,numba
    公众号自定义菜单(含个性化)
  • 原文地址:https://blog.csdn.net/weixin_46074961/article/details/126155227