JavaScript基础知识:错误处理(一)

JavaScript基础知识:错误处理(二)


try…catch

1.语法

try{
  //代码块
}catch(err){
  //错误捕获
}

说明:
1)首先执行 ** try ** 中的代码;
2)如果没有错误会一直执行到 ** try** 结束,跳过 catch(err) 继续执行;
如果有错误,则停止执行 try, 控制流转向 catch(err) 开始处执行,变量 ** err ** 包含了所发生事情的详细信息的 error 对象

所以,try {…} 块内的错误不会杀死脚本 — 我们有机会在 catch 中处理它。
try…catch 只能处理有效代码中出现的错误

2.error对象

看个例子:

try{
    alert(1);
    lalala;
    alert(2);
}catch(err){
    alert('error has occurred!');
    console.log(err);
    console.log('name:'+ err.name);
    console.log('message:'+ err.message);
    console.log('stack:'+ err.stack);
}

在这里插入图片描述

3.抛出自定义的 error

1) “Throw” 操作符

看个例子:
假如我们从服务器端获取一段json数据,获取user.name:

let json = '{"age" : 30}';
try{
    let user = JSON.parse(json);
    alert(user.name); // undefined   没有name

}catch(err){
    alert('error has occurred!'); //未执行
}

上面的例子中,语法没问题,但没有所必须的name,alert为undefined 属于错误,那如何处理这个error呢?
此时,我们可以使用 throw 操作符。

let json = '{"age" : 30}';
try{
    let user = JSON.parse(json);
    if(!user.name){
		throw new SyntaxError("Incomplete data: no name");   //  SyntaxError语法错误
	}
    
}catch(err){
    alert( "JSON Error: " + err.message ); // JSON Error: Incomplete data: no name
}
2) 再次抛出(Rethrowing)

try…catch 中使用 ** throw ** 旨在捕获“数据不正确”的 error,
但是实际上,catch 会捕获到 所有 来自于 try 的 error,错误如下代码和图:

let json = '{ "age": 30 }'; // 不完整的数据

try {
  user = JSON.parse(json); // <-- 忘记在 user 前放置 "let"

  // ...

  alert( user.name );
} catch(err) {
  alert("JSON Error: " + err); // JSON Error: ReferenceError: user is not defined
  // (实际上并没有 JSON Error)
}

在这里插入图片描述

因此,我们可以采用“重新抛出”技术
1)Catch 捕获所有 error
2)在 catch(err) {…} 块中,我们对 error 对象 err 进行分析
3)如果我们不知道如何处理它,那我们就 throw err

通常,我们可以使用 ==instanceof ==操作符判断错误类型:

try {
  user = { /*...*/ };
} catch(err) {
  if (err instanceof ReferenceError) {
    alert('ReferenceError'); // 访问一个未定义(undefined)的变量产生了 "ReferenceError"
  }
}

进一步细化上面的案例:

let json = '{ "age": 30 }'; // 不完整的数据
try {

  let user = JSON.parse(json);

  if (!user.name) {
    throw new SyntaxError("Incomplete data: no name");
  }

  blabla(); // 预料之外的 error

  alert( user.name );

} catch(e) {

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

}

以上内容参考于 https://zh.javascript.info/try-catch , 在此学习记录!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值