JS错误处理

1. try-catch 语句

1.1  将可能会抛出错误的代码都放在try语句块中,而把那些用于错误处理的代码放在catch块中。

try {

//可能会导致错误的代码

someFunction();

} catch (error) {

//在错误发生时怎么处理

alert(error.message)

}

1.2  finally字句

虽然finally字句是可选的,但是一经使用,其代码无论如何都会执行。

function testFinally () {

  try {

       return 2;

  } catch (error) {

      return 1;

  } finally {

      return 0;

  }

}

注:只要代码中包含finally字句,那么无论try还是catch语句块中的return语句都将被忽略。

2. error事件

任何没有通过try-catch处理的错误都会触发window对象error事件。

window.onerror = function (message, url, line) {

   alert(message);

}

 

注:

1. 常见的错误类型

1.1 类型转换错误

1.2 数据类型错误

1.3 通信错误

类型转换错误:

在使用相等(==)和不相等(!=)操作符,或者在if、for、while等流程控制语句中使用非布尔值时,最常发生类型转换错误。建议使用全等(===)和不全等(!==)操作符,以避免类型转换。

在流程控制语句中使用非布尔值,是极为常见的错误来源。为避免此类错误,就要在条件比较时切实传入布尔值。

function concatenate (str1, str2, str3) {

   let result = str1 + str2;

   if (typeof str3 === "string") {

       result += str3;

   }

   return result;

}

数据类型错误:

function reverseSort (values) {

   //验证传入的数据是否合法

   if (values instanceof Array) {

        values.sort();

        values.reverse();

   }

}

大体上来说,基本类型的值应该使用typeof来检测,而对象的值则应该使用instanceof来检测。

通信错误:

javascript与服务器之间的任何一次通信,都有可能产生错误。

对于查询字符串,应该记住必须要使用encodeURIComponent()方法。

 

把错误记录到服务器

function logError (sev, msg) {

   //sev表示错误的严重程度 nonfatal:非致命的错误

   let img = new Image();

   img.src = "log.php?sev=" + encodeURIComponent(sev) + "&msg=" + encodeURIComponent(msg);

}

只要是使用try-catch语句,就应该把相应错误记录到日志中。

for (let i = 0, len = modules.lenght; i <  len; i++) {

     try {

          modules[i].init();

     } catch (error) {

         logError("nonfatal", "Module init failed:" + error.message);

     }

}

对于大型应用来说,自定义的错误通常都使用assert()函数来抛出。

function assert (condition, message) {

    if (!condition) {

       throw new Error(message);

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值