try…catch 语句 try…catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。
语法:
try //尝试着执行 try 包含的代码
{
//在此运行代码
}
catch(err) //如果有错误,执行 catch,e 是异常对象
{
//在此处理错误
}
注意:try…catch 使用小写字母。大写字母会出错。
// try - catch 特点
// 1.可以获取错误信息
// 2.可以避免浏览器控制台报错
// 3.可以屏蔽错误,继续执行。PS:但继续执行的语句如果和错误的语句有上下文关系,可能会继续报错
try {
window.haha();
} catch (e){ //e表示错误对象
alert(e.name); //错误类型
alert(e.message); // 错误信息
alert(e); //错误类型 + 错误信息
}
try-catch的意义
1可以通过修改代码来拍错的,不需要使用try-catch
2 浏览器兼容性问题,可以通过判断浏览器或者判断是否支持某个属性或方法来判断,不需要使用try-catch
比如,无法修改代码的情况下,可能会发生错误,这个时候用try-catch,比如网络中断了
错误实例:
try{
alert(innnerWidth); //w3c
}catch(e){
alert(document.documentElement.clientWidth) //ie
}
//ps: 这样的确能实现兼容性问题,但是逻辑上是不正确的
//ps:因为innnerWidth不支持的浏览器,可能不一定是ie
PS:常规错误和这种浏览器兼容错误 ,我们都不建议使用 try-catch。因为常规错误可以 修改代码即可解决,浏览器兼容错误,可以通过普通 if 判断即可。并且 try-catch 比一般语 句消耗资源更多 ,负担更大 。所以,在万不得已 ,无法修改代码 ,不能通过普通判断的情况 下才去使用 try-catch,比如后面的 Ajax 技术。
抛出错误
//抛出错误,说明错误我们自己无法解决,就需要把错误爆出,报出。
使用 catch 来处理错误信息,如果处理不了,我们就把它抛出丢掉。抛出错误,其实就 是在浏览器显示一个错误信息,只不过,错误信息可以自定义,更加精确和具体。
try {
new 10;
} catch (e) {
if (e instanceof TypeError) {
throw new TypeError('实例化的类型导致错误! '); } else {
throw new Error('抛出未知错误!'); }
}
//直接中文解释错误信息
PS:IE 浏览器只支持 Error 抛出的错误,其他错误类型不支持。