异常
概念
生活中,因为某些意外的情况导致事情没有按计划执行,比如因堵车未赶上火车,我们称这些情况为意外。
在程序中,因为语法的疏忽或其他原因而导致程序中途奔溃的情况,我们成为异常。
JavaScript内置异常类
1. ReferenceError :引用异常
一般是使用了未定义的变量
2.SyntaxError:语法异常
一般指代码写错
3. TypeError:类型异常
一般是指数据类型错误。比如参数类型不对
4.RangeError:范围异常
错误的数组下标
5.URIError:地址异常
在处理非法地址时出错,比如利用decodeURlCompent()来处理地址,地址中时不许有%,有则报错URLError
6.evalError(淘汰):错误使用eval函数时会报错
处理异常(try-catch-finally)
try{
//可能会发生异常的代码
}catch{
//发生异常时执行的代码,cath可以定义个局部变量来接受当前的异常对象
}finally{
//无论是否发生了异常,都会执行的代码
}
/*
finally是可选的,一般在使用了硬盘资源(io)需要关闭的使用的通道才使用finall
不要把所有的代码都放在try里面,这样会导致程序过于集中,并且加大内存资源的消耗,一般
是对局部的代码使用
一般执行属性try-catch-finally
*/
主动抛出异常
概念:当程序执行到需要进行严格判断时,一般当不满足条件时,可以选择主动抛出异常
语法: throw new 异常类名('发生异常时提示的内容')
一般时强业务逻辑时,会使用主动抛出的异常
自定义异常(ES6、ES5)
javaScript内置异常并不能很好的满足业务需求。比如登录异常、注册异常等,利用自定义异常语法来解决
语法
class 自定义异常名 extends Error {
constructor(message){
super(message)
this.name = '自定义异常名'
}
}
//自定义通常只能时主动抛出
//es5实现自定义异常
自定义异常类名.prototype = new Error()
function 自定义异常类名(message){
this.name = message
this.name = "自定义异常类名"
}
return在异常中的表现
-无异常时,如果return在try里,会先保存要返回的数据,再去执行finally(如果有),执行之后就返回
-有异常时,返回的catch里的return
-无论是否有异常,只要finally有return,那么执行时的finally里的return
异常对象的常见属性
name:发生异常的名字
message:发生异常的原因
stack:异常方法栈,会输出在哪个位置发生了异常