JS 常见错误类型

Error

Error 是最基本的错误类型,其他的错误类型都继承自该类型。Error 对象主要有两个重要属性 message 和 name 分别表示错误信息和错误名称。

Error 类型一般都是开发人员自己抛出的异常。

try {
  throw new Error('抛出的异常');
} catch (error) {
  console.log(error);
}

SyntaxError – 语法错误

语法错误在任何编程语言中都是最常见的错误类型,表示不符合编程语言的语法规范。

此类异常发生在 JavaScript 解析/编译时,此类异常一旦发生,导致整个js文件都无法执行。

TypeError – 类型错误

表示变量或参数不是预期类型

ReferenceError – 引用错误

引用一个不存在的变量时发生的错误。

调用它不存在的属性只会是未定义状态,也就是 undefined

RangeError – 边界错误

表示超出有效范围时发生的异常,主要的有以下几种情况:

  • 数组长度为负数或超长
  • 数字类型的方法参数超出预定义范围
  • 函数堆栈调用超过最大值

URIError – URL 错误

在调用 URI 相关的方法中 URL 无效时抛出的异常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()几个函数。

EvalError

表示错误的原因:与 eval() 有关。

自定义异常

class UnAuthError extends Error { }
class ParamError extends Error { }

function controller() {
  throw new UnAuthError();
}

try {
  controller();
} catch (error) {
  if (error instanceof UnAuthError) {
    return '无权限';
  } 
  if (error instanceof ParamError) {
  return '参数错误';
  } 
}

判断错误类型

try {
    foo.bar();
} catch (e) {
    if (e instanceof EvalError) {
        alert(e.name + ": " + e.message);
    } else if (e instanceof RangeError) {
        alert(e.name + ": " + e.message);
    }
}

参考:

你需要了解的几种 JavaScript 异常类型

MDN-Error

词汇:

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

// 定义构造函数
function C(){} 
function D(){} 

var o = new C();

o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype

o instanceof D; // false,因为 D.prototype 不在 o 的原型链

o instanceof Object; // true,因为 Object.prototype.isPrototypeOf(o) 返回 true