JS 错误处理

错误处理

try catch、

流程

  1. 执行try内的代码

  2. 未发生错误,直接结束

  3. 发生错误,控制流转向catch,执行catch内代码

try catch解决的是runtime errors,解决的是有效代码的错误,有时候被称为exceptions 异常。如果是在parse-time,解析事件出现的错误,则引擎无法理解代码,无法恢复。

parse-time=>runtime

针对scheduled 定时任务的异常处理

如果定时任务在try 中

try{
    setTimeout(func,1000);
}
catch(error){
    // 不会被执行,即错误不会被捕获,原因是代码已经走过了,但定时任务还没有执行
}

解决方法:

将try catch包含在定时任务中

setTimeout(function()
{
    try{
        //函数代码
    }
    catch(error){
        //捕获代码
    }
}1000)

这样就可以对定时scheduled任务进行异常处理了。

Error 对象

在catch中Error对象的名字可以任意定义(符合规定)

Error的属性

name

名字例如,对于一个未定义的变量,名称是 “ReferenceError”;

message

详细描述

stack

当前的调用栈

Error 在catch中是可选的

下面格式也是正确的

try{
    
}
catch{
    // 没有Error对象
}

自定义error

定义:

我们自己为了解决某些系统认为正常,但不符合我们自己需求的异常。

自定义方法:

非标准方法
if(发生错误){
    throw 一个对象
}

这个对象最好是包含name, 和message,这是为了和系统的error兼容。

标准方法
let error = new Error(message);
let error = new SyntaxError(message);
let error = new ReferenceError(message);

if(条件){
    throuw new Error(message);
}

rethrow 精确处理error

try中发生的所有错误都会被catch捕获,但我们一般处理我们想要处理的error,其他的error将rethrow出去

如下,针对SyntaxError进行处理

catch(e){
    if (e instanceof SyntaxError) {
    alert( "JSON Error: " + e.message );
  } else {
    throw e; // 再次抛出 (*)
  }
}

​ 再次抛出的会被外部的catch捕获

try…catch…finally

finally 在最后是默认执行的代码。就像switch里的finally一样

finally在try…catch的任何出口之前运行,例如return之前会运行finally中的代码

try…finally

用处:即使try中代码执行失败,finally的代码在结束前也会执行

全局catch window.onerror

window.onerror = function(message,url,line,col,error){
    // 处理代码
}

message 错误信息

url 错误的脚本url

line col 发生错误的代码行号和列号

error Error对象

作用:

不是恢复脚本执行,脚本依然死掉,但window.onerror会执行处理代码,将错误信息发送给开发者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值