1、try-catch语句
try{
//可能会导致错误的代码
}
catch{
//在错误发生时怎么处理
}
对于js来说,catch接收到的是一个包含错误信息的对象,具有一个message属性。 error.message
finally:
可以搭配finally语句,无论有没有发生错误,都会执行finally内的代码
try{
......
}
catch{
......
}
finally{
//最后一定执行的内容
}
即使try-catch中有return返回语句,也要先执行finally中的,如果finally中也有return语句,那么就优先执行finally中的return,屏蔽try中的return
注意:
当try-catch语句中发生了错误时,浏览器会认为错误已经被处理了,所以就不会通过自己的机制记录,或者报告错误。这个相当于自定义的错误处理机制。
所以try-catch适用于我们无法控制的错误,例如在使用一个不开源的js库,因为你改不了源码,所以就要try
2、throw抛出错误
单独使用throw:
在遇到throw时,如果没有与try-catch一起使用,那么程序会立即停止。
throw后面可以加任何东西,例如string,布尔值,对象。。。。也可以加错误类型,这样浏览器会以正常错误报告的方式进行记录显示。
throw new Error("something wrong!");
throw new TypeError("the type of this is wrong!");
也可以通过Error原型链,继承添加自己的新错误类型,自己制定name和message
throw语句可以与try-catch语句搭配使用
try
{
.......
throw value; //程序中抛出异常
}
catch(err)
{
//例外处理程序段,抛出的value在此均为err,内容可以直接拿来用
}
在这种与try-catch配合使用时,程序不会停止。
3、error事件
一般的错误事件只能用DOM0事件来写
window.onerror = function(){
........
}
特例:
image也支持error,例如当src中的URL有问题时,会触发error事件,这里的error可以DOM0,DOM2均可
4、常见错误类型
①类型转换错误:
相等操作符:==
这个就是最基本的判断用,但是在js中会自动进行类型转换
5 ==“5” //true
js会将5转成字符串,然后与“5”比较,结果为true
全等操作符:===
更严格的判断,不会自动做类型转换
5===“5” //false
不相等:!=
同上==
不全等:!==
同上!==
附:
注意像if这种语句,在进行判断后可能会自动更改数据类型,可能会将其变为布尔值,所以以防万一可以用if(typeof a ==“string”)
②数据类型错误:
此处主要是以防将预料之外的值传给函数,所以要写一些适当的数据类型检测代码
基本类型的值用typeof来检测(参见上面的附内容,if)
对象类型检测直接用instanceof
例如检测对象是否为数组,则直接 if(a instanceof Array)
③通信错误:
主要涉及与服务器的通信错误,举例:
格式不正确的URL,服务器相应数据不正确