js 错误处理方式

本文介绍了JavaScript中的异常处理机制,包括try...catch...finally语句的使用,如何自定义错误以及如何处理和抛出异常。同时,提到了全局错误处理函数window.onerror,用于捕获未被try...catch块捕获的错误。
摘要由CSDN通过智能技术生成

try、catch、finally

  • try语句测试代码块错误
  • catch语句处理错误
  • finally语句在try和catch之后,无论是否有异常都会执行
try{
... //异常的抛出
}catch(e){
 ... //异常的捕获与处理}
finally{ 
... //结束处理
}

特点

  • try和catch成对出现
  • 只会检测语法错误
  • 只会检测同步运行的错误

finally

一定会执行的代码

  • try块中有error,在catch后执行finally
  • try块中有return,优先执行finally再return
  • 可以try…finallly,也可以try…catch…finally
  • try块中声明的let,finally中不能用(try块和finally块是独立的)

throw

定义:自定义错误,术语为抛出异常throw exception
异常可以是js字符串、数字、逻辑值、对象,但是最好使用具有name和message属性的对象 保持和内置error的兼容性

let json = '{ "age": 30 }'; // 不完整的数据
try {
  let user = JSON.parse(json); 
  if (!user.name) {
    throw new SyntaxError("数据不全:没有 name"); //抛出
  }
  alert( user.name );
} catch(err) {
  alert( "JSON Error: " + err.message ); // JSON Error: 数据不全:没有 name
}

error构造器

  • Error
  • SyntaxError
  • ReferenceError
  • TypeError等
  • 对于内建的 error对象,name 属性刚好就是构造器的名字。message 则来自于参数(argument)。
let error = new Error(message);
let error = new SyntaxError(message);
let error = new ReferenceError(message);

自定义error

class ValidationError extends Error {
  constructor(message) {
    super(message); 
    this.name = "ValidationError";
  }
}
function test() {
  throw new ValidationError("Whoops!");
}
try {
  test();
} catch(err) {
  alert(err.message); // Whoops!
  alert(err.name); // ValidationError
  alert(err.stack); // 一个嵌套调用的列表,每个调用都有对应的行号
}

再次抛出

代码中不一定只有一个error,确保catch只处理知道的error并抛出其他所有error

function readData() {
  let json = '{ "age": 30 }';
  try {
    // ...
    fn(); // error!
  } catch (err) {
    // ...
		// 类型判断 将未知error再次抛出
    if (!(err instanceof SyntaxError)) {
      throw err; 
    }
  }
}
//在外部统一处理所有未知eoor
try {
  readData();
} catch (err) {
  alert( "External catch got: " + err ); // 捕获
}

全局catch

在try…catch语法外的error,会触发

window.onerror = function(message, url, line, col, error) {
  // ...
};
  • message:error 信息。
  • url:发生 error 的脚本的 URL。
  • line,col:发生 error 处的代码的行号和列号。
  • error:error 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值