找回密码
 立即注册
老冷培训班汇总介绍老冷付费工具汇总介绍老鬼UI编程学院EasyClick所有产品简介EasyClick官方交流群
IOS授权价格IOS/安卓 自助提卡链接安卓-中控群控-电脑授权-购买IOSusb版投屏群控教程IOS脱机版激活教程
IOS脱机版wifi局域网脚本中控教程IOS脱机版wifi局域网群控投屏教程远程调试frp,兼容安卓/IOS热更新工具,兼容安卓/IOS脱机版老冷网盘
查看: 2010|回复: 0

[教程] 【EasyClick】【JavaScript】JavaScript 异常处理(try+catch+finally+throw)

[复制链接] |主动推送

1054

主题

135

回帖

4万

积分

管理员

【导师】

积分
40640
最后登录
2024-11-24
在线时间
1650 小时

兔年勋章金牌银牌铜牌导师微信认证热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老QQ认证EC VIP学员

发表于 2023-3-26 20:44:58 | 显示全部楼层 |阅读模式

马上注册,解锁更多高级玩法

您需要 登录 才可以下载或查看,没有账号?立即注册

×
JavaScript 异常处理(try+catch+finally+throw)
ECMA-262 规范了 7 种错误类型,具体说明如下。其中 Error 是基类,其他 6 种错误类型是子类,都继承 Error 基类。Error 类型的主要用途是自定义错误对象。
Error:普通异常。与 throw 语句和 try/catch 语句一起使用,属性 name 可以读写异常类型,message 属性可以读写详细错误信息。
  • EvalError:不正确的使用 eval() 方法时抛出。
  • SyntaxError:出现语法错误时抛出。
  • RangeError:数字超出合法范围时抛出、
  • ReferenceError:读取不存在的变量时抛出。
  • TypeError:值得类型发生错误时抛出。
  • URIError:URI 编码和解码错误时抛出。
try/catch/finally语句
try/catch/finally 是 JavaScript 异常处理语句。语法格式如下:
[JavaScript] 纯文本查看 复制代码
try{
    //调试代码块
}
catch(e) {
    //捕获异常,并进行异常处理的代码块
}
finally{
    //后期清理代码块
}


在正常情况下,JavaScript 按顺序执行 try 子句中的代码,如果没有异常发生,将会忽略 catch 子句,跳转到 finally 子句中继续执行。
如果在 try 子句运行时发生错误,或者使用 throw 语句主动抛出异常,则执行 catch 子句中的代码,同时传入一个参数,引用 Error 对象。
在异常处结构中,大括号不能省略。
示例1
下面示例先在 try 子句中制造一个语法错误,然后在 catch 子句中获取 Error 对象,读取错误信息,最后在 finally 子句中提示代码。
[JavaScript] 纯文本查看 复制代码
try {
    1 = 1;  //非法语句
}
catch (error) {  //捕获错误
    console.log(error.name);  //访问错误类型
    console.log(error.message);  //访问错误详细信息
}
finally {  //清除处理
    console.log("1=1");  //提示代码
}


catch 和 finally 子句是可选的,在正常情况下应该包含 try 和 catch 子句。
[JavaScript] 纯文本查看 复制代码
try {1 = 1;}
catch (error) { }



不管 try 语句是否完全执行,finally 语句最后都必须要执行,即使使用了跳转语句跳出了异常处理结构,也必须在跳出之前先执行 finally 子句。
示例2
下面示例在函数体内设计一个异常处理结构,为每个子句添加一个 return 语句。调用函数后,实际返回的是“finally”,而不是“try”,因为 finally 子句必须最后执行,把 finally 子句去掉,函数才会返回“try”。
[JavaScript] 纯文本查看 复制代码
function test() {
    try {
        return "try";
    }catch {
        return "catch";
    }finally {
        return "finally";
    }
}
console.log(test());  //返回“finally”


try/catch/finally 语句允许嵌套使用,嵌套的层数不限,同时形成一条词法作用域链。在 try 中发生异常时,JavaScript 会停止程序的正常运行,并跳转到层级最近的 catch 子句(异常处理器)。如果没有找到异常处理器,则会沿着作用域链,检查上一级的 catch 子句,以此类推,直到找到一个异常处理器。如果在程序中没有找到任何异常处理器,将会显示错误。
示例3
下面代码就是一个多层嵌套的异常结构,在处理一系列的异常时,内层的 catch 子句通过将异常抛出,就可以将异常抛给外层的 catch 子句来处理。
[JavaScript] 纯文本查看 复制代码
try {  //外层异常处理结构
    try {  //内层异常处理结构
        test();  //错误调用
    }
    catch(error) {
        if (error.name == "ReferenceError") console.log("错误参考");   //如果是异常引用,则提示这样的信息
        else throw error;  //否则再次抛出一个异常,并把错误信息向上传递
        }
}
catch (error) {  //获取内层异常处理结构中抛出的异常
    console.log("内层 try/catch 不能够处理这个错误");
}


throw语句
throw 语句能够主动抛出异常,语法格式如下:
throw expression;
expression 是任意类型的表达式,一般为 Error 对象,或者 Error 子类示例。
当执行 throw 语句时,程序会立即停止执行。只有当使用 try/catch 语句捕获到被抛出的值时,程序才会执行。
示例
下面示例在循环体内设计当循环变量大于 5 时,定义并抛出一个异常。
[JavaScript] 纯文本查看 复制代码
try {
    for (var i = 0;i < 10;i++) {
        if (i > 5) throw new Error ("循环变量的值大于 5 了");  //定义错误对象,并抛出异常
        console.log(i);
    }
}
catch (error) { }  //捕获错误,其中error就是new Error() 的实例


在抛出异常时,JavaScript 也会停止程序的正常执行,并跳转到最近的 catch 子句。如果没有找到 catch 子句,则会检查上一级的 catch 子句,以此类推,直到找到一个异常处理器为止。如果在程序中没有找到任何异常处理器,将会显示错误。

VIP培训班介绍汇总[安卓/IOSusb版/IOS脱机版/PHP/nodejs等]
http://bbs.laoleng.vip/forum.php?mod=viewthread&tid=428

付费工具介绍汇总[热更/远程调试/IOS易语言UI/拓展插件等]
http://bbs.laoleng.vip/forum.php?mod=viewthread&tid=430
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

想要力量吗骚年上一条 /2 下一条

关闭

免责声明|Archiver|手机版|老冷编程学院 ( 闽ICP备20013040号-2 )|网站地图

GMT+8, 2024-11-24 13:02

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表