一、错误分类
执行代码期间可能会发生的错误有多种类型。每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象。js共定义了下列 7 种错误类型:
- Error:基本的错误类型,其他类型都继承自这个类型
- EvalError:使用 eval()函数而发生异常时被抛出
- RangeError:范围错误
- ReferenceError:引用错误
- SyntaxError:语法错误
- TypeError:类型错误
- URIError:表示以一种错误的方式使用全局URI处理函数而产生的错误,例如:(decodeURIComponent(’%’))
二、错误处理方式
2.1、异常捕获(try…catch语句)
ES3开始就引入了 try-catch 语句,是 JavaScript 中处理异常的标准方式。
语法:
try{
//可能发生异常的代码
}catch(error){
//发生错误执行的代码
}
来看个简单demo:
代码说明及小结:
1、把有可能出的问题的代码放在 try 语句中。try语句中可以理论上可以写任何的代码,只要有一行代码出现问题,整个程序的执行流程就会立即调到catch语句中执行,try中错误下面的代码都不会执行
2、在执行catch中的代码之前,js引擎会首先根据错误类型自动创建一个错误,并通过catch后面的参数传递到catch中。不同的浏览器创建的error对象不一样,但是他们都会包含一个message属性,这个message代表着错误的相关说明信息,这块关于不同浏览器之间的错误对象内容不同有兴趣的同学可以自行搜索了解,一般开发中都只有使用message,因为只有它兼容所有浏览器(像IE会提供description属性和错误数量的number属性,FireFox添加了fileName、lineNumber、stack属性,Safari有line、sourceId、sourceUrl属性)
3、catch中的代码执行完毕之后,会继续执行后面的代码,程序不会停止下来
4、try…catch…finally是完整形式,finally中的语句是最终必定执行的,一般用不到,了解下即可
2.2、抛出异常(throw)
抛出异常使用throw关键字,语法如下:
throw 异常对象;
异常对象一般是用new Error(“异常消息”), 也可以使用任意对象:
function test(a){
if(a == undefined){
方式1:throw new Error("请传递参数");
//这里也可以使用自定义的对象
方式2:throw {"id":1, msg:"参数未传递"};
}
}
try{
test();
}catch(e){
console.log(e);
}
代码说明/小结:
1、通过throw new Error时,这里的error可以是本文开头所讲的所有类型;
2、只要有异常对象抛出,不管是浏览器抛出的,还是代码主动抛出,都会让程序停止执行。如果想让程序继续执行,则有也可以用try…catch来捕获