异常基础
概述
当 JavaScript 引擎执行 JavaScript 代码时,有可能会发生各种异常,例如是语法异常,语言中缺少的功能,由于来自服务器或用户的异常输出而导致的异常。
而
Javascript
引擎是单线程的,因此一旦遇到异常,**Javascript
** 引擎通常会停止执行,阻塞后续代码并抛出一个异常信息,因此对于可预见的异常,我们应该捕捉并正确展示给用户或开发者
Error对象
概述
Error是JavaScript的内置异常的基础类。该类主要是在程序报错时会创建一个异常对象,该异常对象就包含了错误的相关信息,比如错误内容(message)、出错的地方(stack)、错误的类型名称(name)
message
、stack
、name
是Error
类的三个属性。开发人员可以通过
throw
关键字来主动报错。
Error内置子类 (异常分类)
RangeError
:范围错误。一般是数组长度不合法的时候会报该错误referenceError
:引用错误。使用了未定义的变量URIError
:对地址解析不对,会导致该错误TypeError
:处理的数据类型不对SyntaxError
:语法错误evalError
:当使用eval
时的报错。但是目前使用eval
不会报错,所以这个只是为了兼容以前的版本遗留下来的。
// RangeError
let arr = new Array(-1);//新建长度为-1的数组
// SyntaxError
let 1a = 1;
// TypeError
let a = new 1;
//URIError
let a = decodeURI("%2");
异常处理
try-catch:异常捕获和处理
概述
try-catch是专用于解决捕获异常防止程序终止,后续代码无法运行,这样可以保证代码哪怕报错之后,也不会终止程序的运行。
语法
try{
//可能会报错的代码
}catch(error){
//当报错时会执行catch里的代码
}finally{
//无论是否报错,都会执行finally里的代码
}
- 报错时,错误的相关信息JavaScript会自动创建一个异常对象并将信息保存起来作为
catch
代码执行时的参数 - 如果
try
里的代码没有报错,那么catch
里的代码不会执行。
throw :主动抛出异常
throw 异常对象;
例子:抛出一个loginError异常
throw new LoginError();
自定义异常
背景:为了实现自己项目中业务相关的异常,可以通过定义新的类继承
Error
类来实现自定义异常作用:实现定制的异常
语法
class LoginError extends Error{ constructor(message){ //调用父类初始化构造器 super(message); this.name = "LoginError"; } }
总结
- 程序中的异常是指程序报的”错误”,本质上是一个异常对象。
- 能够使用
try-catch-finally
捕获并处理异常,能够保证处理异常之后程序可以继续执行 - 可以使用
throw
来主动抛出异常(不符合自己的业务逻辑) - 当
JavaScript
内置异常满足不了开发需求时可以自定义异常- 定义一个类继承
Error
类 - 构造函数里需要调用
super(message)
- 构造函数里需要给
this.name
赋值,这个表示自定义异常的类型名称。 - 自定义异常可以通过
throw
来抛出,即主动抛出
- 定义一个类继承