pidtfork 发表于 2020-10-28 18:49:20

JavaScript捕获错误

本帖最后由 pidtfork 于 2020-10-28 18:51 编辑

JavaScript捕获错误定义和用法


try/catch/finally 语句用于处理代码中可能出现的错误信息。

错误可能是语法错误,通常是程序员造成的编码错误或错别字。也可能是拼写错误或语言中缺少的功能。

try语句允许我们定义在执行时进行错误测试的代码块。

catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。

finally 语句在 try 和 catch 之后无论有无异常都会执行。

注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。

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




语法


try {
    //tryCode - 尝试执行代码块
}
catch(err){
    //catchCode - 捕获错误的代码块
}
finally{
    //finallyCode - 无论 try / catch 结果如何都会执行的代码块
}


finally 语句一般都不写,反正写在try/catch后面一样都会执行。


例子

通常在数据接收时,如定义的通信必须使用json格式,如果接收到不是json格式数据,或者因为网络原因接收到不完整的数据包,如果还按照json处理就会异常报错了,所以可以这样写捕获可能的异常,保证数据是可控的。

setStringReceive("NET1",function(data){
    try{
      varreceive = JSON.parse(data);
       ABC //ABC 未定义一样会抛出异常
    } catch(error) { //error 这个参数名是可以随便定义名字的,可以是任意字符串
      console.log("json error ",error);
    }
});


主动抛出异常

使用 throw xxx 可以主动抛出异常,xxx可以是任意值,如果不是很严格可以使用字符串来标识抛出的错误名称,官方标准写法是使用抛出一个Error对象。抛出的这个值会被 catch 捕获;

//实例化一个 Error 对象 传入消息字符串
// 实际项目中可以建立多个错误对象
// 如xxx登陆错误、xxx密码错误、xxx数据格式错误等等
varerrs = new Error("test message"); //定义一个异常消息

try{
    throwerrs;//主动抛出一个异常
} catch (error) { //error是一个对象
    console.log(error);         //Error:test message
    console.log(error.message); //test message
    console.log(error.name);    //Error
    console.log(error.stack);   //Error:test message at <anonymous>:4:12
}


如果使用 throw “string” 抛出一个字符,那么 catch (error) 中的 error 就是一个字符串,不包含 message、name、stack属性。

Error对象

通过 var error = new Error("xxx") 实例化的对象,error.name 就是Error,message属性为xxx,stack属性值就是栈属性,栈产生于最近一次调用最早的那次调用,返回原始的全局作用域调用

除了可自定的Error对象,还有几个系统异常对象。

•            EvalError eval函数的错误.此异常不再会被JavaScript抛出
•            InternalError JavaScript引擎内部的错误
•            RangeError 当一个值不在其所允许的范围或者集合中。new Array(-1);
•            ReferenceError 对象代表当一个不存在的变量被引用时发生的错误。未定义错误;
•            SyntaxError 尝试解析语法上不合法的代码的错误。语法错误。
•            TypeError 值的类型非预期类型时发生的错误。类型错误;
•            URIError 当向全局 URI 处理函数传递一个不合法的URI时


页: [1]
查看完整版本: JavaScript捕获错误