深入浅出JS—23错误处理方案

不知道你是否和我一样,总是闻“错”色变,想要自己的代码完美无缺。但其实“错误”也是程序的一部分,学会如何驾驭错误,在合适的时机抛出错误,在适合的位置捕获错误,对于代码水平提升非常重要

一、抛出错误

1 throw关键字的使用

使用throw关键字来抛出错误信息,throw可以理解为一种特殊的return,可以抛出基本数据类型、对象等。抛出错误后,如果没有捕获错误的代码,主程序会立即终止执行。

  • throw 基本数据类型
throw '错误信息';
throw 100
  • throw 自定义错误对象
class MyError {
  constructor(errorCode, errorMessage) {
    this.errorCode = errorCode;
    this.errorMessage = errorMessage;
  }
}

throw new MyError(-1001, '错误信息')
  • throw 内置错误类(最常用)

最常见的是Error类,它有三个属性

  1. name:Error的名称,通常和类的名称一致;
  2. messsage:创建Error对象时传入的message;
  3. stack:整个Error的错误信息,包括函数的调用栈(方便debug)

Error类有三个子类:TypeError SyntaxError RangeError,分别表示类型错误、语法错误和边界错误

throw new Error('错误信息');

// 等价于
const error = new Error('错误信息');
throw error;

终端打印的错误对象解读
包括name、message、stack三部分
在这里插入图片描述

2 主动抛错的好处

函数对传入的参数进行类型校验,如果不符合要求,需要通过抛出错误来告诉使用者如何更正,而不是return之后继续执行

function sum(num1, num2) {
  // 当传入参数不正确时,如果直接return undefined,调用者不知道内部发生了什么问题
  // if(typeof num1 !== 'number' || typeof num2 !== 'number') return;

  if (typeof num1 !== "number" || typeof num2 !== "number") {
    throw new TypeError("传入参数必须为数字类型"); // return ->>throw 若未对错误进行处理,程序会中止
  }

  return num1 + num2;
}

二、捕获错误

如果我们在调用一个函数时,这个函数抛出了异常,但是我们并没有对这个异常进行处理,那么这个异常会继续传递到上一个函数调用中;如果到了最顶层(全局)的代码中依然没有对这个异常的处理代码,这个时候就会报错并且终止程序的运行。
很多情况下当出现异常时,我们并不希望程序直接退出,而是希望可以正确的处理异常

1 try-catch的使用

使用try-catch来捕获并处理错误,这样后续程序不会终止执行

  • ES10后,catch可以无参数
  • finally部分可有可无
try {
  /*可能出错的代码*/
} catch (error) {
  /*在这里对可能出现的错误进行处理*/
} finally {
  /*无论是否报错,都会执行finally*/
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值