js 中有哪些内置错误类型?

1,526 阅读3分钟

基类Error

Error 是基类型,其他内置错误类型都是继承该类型,因此所有内置错误类型都是共享相同的属性(所有错误对象上的方法都是这个默认类型定义的方法)。

浏览器很少会抛出 Error 类型的错误,该类型主要用于抛出自定义错误。

构造函数

//创建一个错误
new Error([message[, fileName[,lineNumber]]]) //参数均为可选

实例上有哪些属性? image.png

内置错误类型 1 :ReferenceError(引用错误)

常见指数:🌟🌟🌟🌟🌟  不夸张的说,线上 80%错误都是这个

表示引用错误,使用了未声明的变量。

错误之前的代码会执行,之后代码不会执行。

使用未声明的变量 image.png

把变量赋值给一个无法赋值的 xx

表示:左侧的赋值无效

image.png

捕获一个错误

try {
  var a = undefinedVariable;
} catch (e) {
  console.log(e instanceof ReferenceError); // true
  console.log(e.message);                   // "undefinedVariable is not defined"
  console.log(e.name);                      // "ReferenceError"
  console.log(e.fileName);                  // "Scratchpad/1"
  console.log(e.lineNumber);                // 2
  console.log(e.columnNumber);              // 6
  console.log(e.stack);                     // "@Scratchpad/2:2:7\n"
}

新建错误

try {
  throw new ReferenceError('Hello''aaa.js'10);
} catch (e) {
  console.log(e instanceof ReferenceError); // true
  console.log(e.message);                   // "Hello"
  console.log(e.name);                      // "ReferenceError"
  console.log(e.fileName);                  // "aaa.js"
  console.log(e.lineNumber);                // 10
  console.log(e.columnNumber);              // 0
  console.log(e.stack);                     // "@Scratchpad/2:2:9\n"
}

内置错误类型 2:RangeError

常见指数:⭐⭐⭐ 说实话,不太常见,但很容易构造

会在数值越界时抛出.例如,定义数组时如果设置了不支持的长度,如-1,又或者没有给递归设置停止条件时触发。

该类型在 JavaScript 发生不多。

超过数组最大长度限制

自定义 RangeError 错误

var check = function(num) {
  if (num < MIN || num > MAX) {
    throw new RangeError('Parameter must be between ' + MIN + ' and ' + MAX);
  }
};
try {
  check(500);
}
catch (e) {
  if (e instanceof RangeError) {
    // 处理越界错误
  }
}

内置错误类型 3:TypeError

常见指数:⭐⭐⭐⭐ 使用 ts 之前可能会有,ts 之后应该能干掉一大部分

TypeError 在 JavaScript 中很常见,主要发生变量在运行时的访问不是预期类型,或者访问不存在的方法时,尤其是在使用类型特定的操作而变量类型不对时。

在给函数传参前没有验证的情况下,错误发生较多。

比如 a 变量是个基本类型,却被当做函数调用

比如访问不存在的方法

内置错误类型 4:SyntaxError

常见指数:⭐⭐⭐⭐⭐ 太常见了,一般的在开发环境,调试的时候

这是最常见的错误。当我们输入 JS 引擎不能理解的代码时,就会发生这个错误。 JS 引擎在解析期间会捕获了这个错误,而不是运行时。

或者给 eval() 传入的字符串包含 JavaScript 语法错误时,也会抛出此异常

内置错误类型 5:URIError

常见指数:⭐ 很少见

URIError 只会在使用 encodeURL()或 decodeURL()时,传入了格式错误的 URL 时发生,但非常罕见,因为上面两个函数非常稳健.

比如对空格进行编码,然后把编码的结果改为非法的结果,对该结果再进行解码,就会抛出异常

内置错误类型 6:EvalError

常见指数:0 稀有

会在使用 eval()函数发生异常时抛出。

EvalError 不在当前 ECMAScript 规范中使用, 因此不会被运行时抛出. 但是对象本身仍然与规范的早期版本向后兼容.

以下来自 mdn

内置错误类型 7:InternalError

常见指数:0 稀有

表示出现在 JavaScript 引擎内部的错误。

例如,递归过多导致了栈溢出.这类型并不是代码中通常要处理的错误,如果真的发生了这种错误,很可能代码哪里搞错了或者有危险.

但事实证明递归过多导致栈溢出报的是 RangeError。