UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 2179|回复: 0

[学习笔记] JavaScript捕获错误

[复制链接]

10

主题

11

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
QQ
发表于 2020-10-28 18:49:20 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-10-28 18:51 编辑

JavaScript捕获错误定义和用法


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

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

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

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

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

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

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




语法


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



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


例子

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

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



主动抛出异常

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

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

  5. try{
  6.     throwerrs;  //主动抛出一个异常
  7. } catch (error) { //error是一个对象
  8.     console.log(error);         //Error:test message
  9.     console.log(error.message); //test message
  10.     console.log(error.name);    //Error
  11.     console.log(error.stack);   //Error:test message at <anonymous>:4:12
  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时



高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2024-4-20 18:29 , Processed in 0.035364 second(s), 19 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

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