异常
throw关键字
throw关键字可以抛出异常,javascript中提供了内置的错误类Error
Error是错误的基类,还有如下7种错误类:
- InternalError: 内部错误,底层javascript引擎抛出异常时由浏览器抛出。如递归过多导致栈溢出。
- EvalError: 使用eval( )函数发生异常时抛出。没有把eval作为一个函数来调用时就会抛出此错误。很少遇见。
- RangeError: 数值越界时抛出。如数组下标越界时。
- ReferenceError: 引用错误,找不到对象时抛出。使用没有声明的变量。
- SyntaxError: 语法错误,eval()中写的代码语法错误,eval()函数外很少遇见。编辑器会直接报错。
- TypeError: 类型错误。
- URIError:只会在使用encodeURI()和DecodeURI()但传入了格式错误的URL是抛出此错误。基本不会遇见此错误。
try/catch
try/catch对抛出的异常进捕获,捕获异常后,后续代码就可以执行,如果没有对抛出的错误进行捕获,后续代码将会终止执行。
抛出的错误会向上传递,如果到了最顶层(全局)的代码中依然没有对这个异常的处理代码,这个时候就会报错并且终止程序的运行。
js
function foo(type) {
if (type === 0) {
throw new TypeError("foo不能为0");
}
}
function baz() {
foo(0);
//异常还没有被捕获,所以不会打印baz
console.log("baz");
}
function fnc() {
try {
baz();
} catch (error) {}
//捕获异常之后,此处会打印
console.log("fnc");
}
fnc();