Skip to content

异常

throw关键字

throw关键字可以抛出异常,javascript中提供了内置的错误类Error

Error是错误的基类,还有如下7种错误类:

  1. InternalError: 内部错误,底层javascript引擎抛出异常时由浏览器抛出。如递归过多导致栈溢出。
  2. EvalError: 使用eval( )函数发生异常时抛出。没有把eval作为一个函数来调用时就会抛出此错误。很少遇见。
  3. RangeError: 数值越界时抛出。如数组下标越界时。
  4. ReferenceError: 引用错误,找不到对象时抛出。使用没有声明的变量。
  5. SyntaxError: 语法错误,eval()中写的代码语法错误,eval()函数外很少遇见。编辑器会直接报错。
  6. TypeError: 类型错误。
  7. 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();