JavaScript 错误类型
JavaScript 中的 7 种内置错误类型及其触发场景
问题
JavaScript 中有哪些错误类型?分别在什么情况下触发?
解答
JavaScript 提供了 7 种内置错误类型,所有错误类型都继承自 Error。
Error
最基本的错误类型,其他错误类型都继承自它。通常用于开发者自定义错误:
throw new Error('自定义错误信息');
EvalError
使用 eval() 函数时发生异常抛出。当 eval 被当作构造函数或被重新赋值时触发:
new eval(); // EvalError
eval = foo; // EvalError
实际开发中很少遇到,因为 eval 本身使用就不多。
RangeError
数值超出有效范围时触发:
new Array(-1); // 负数长度
new Array(4294967296); // 超过最大长度
// 递归爆栈也会触发
function recursion() {
recursion();
}
recursion(); // RangeError: Maximum call stack size exceeded
ReferenceError
访问未声明的变量时触发:
var a = b; // Uncaught ReferenceError: b is not defined
console.log(undefinedVar); // ReferenceError
SyntaxError
代码不符合语法规范时触发,通常在解析阶段就会报错:
var a = ; // SyntaxError: Unexpected token
if (true { } // SyntaxError: Unexpected token
TypeError
变量类型不符合操作要求时触发,是最常见的错误之一:
var o = new 10; // TypeError: 10 is not a constructor
var a = null;
a.style.width = "10px"; // TypeError: Cannot read property 'style' of null
新手常见场景:获取不到 DOM 元素就操作其属性。
URIError
URI 编码/解码函数的参数格式不正确时触发:
decodeURI('%'); // URIError: URI malformed
实际开发中很少遇到。
关键点
- 所有错误类型都继承自
Error,共享相同的属性结构 TypeError和ReferenceError是开发中最常见的两种错误RangeError除了数值范围问题,递归爆栈也会触发SyntaxError在代码解析阶段就会抛出,无法被 try-catch 捕获(运行时语法错误除外)- 操作 DOM 前要确保元素存在,避免
TypeError
目录