前端JavaScript中常见的异常类型
- SyntaxError(语法错误)
- ReferenceError(引用错误)
- TypeError(类型错误)
- RangeError(范围错误)
- URIError(URI错误)
- EvalError(eval错误)
- AggregateError(聚合错误)
- 自定义错误
1. SyntaxError(语法错误)
- 原因:代码不符合JavaScript语法规则。
- 常见场景:
- 缺少括号、引号、花括号等
- 错误的关键字拼写
- 使用保留字作为变量名(如 let class = …)
- 示例:
let a = ; // SyntaxError: Unexpected token ';'
2. ReferenceError(引用错误)
- 原因:引用了一个不存在的变量或函数。
- 常见场景:
- 拼写错误的变量名
- 在变量声明前访问(非let/const的暂时性死区)
- 访问未导入的模块成员
- 示例:
console.log(b); // ReferenceError: b is not defined
3. TypeError(类型错误)
- 原因:操作或函数应用于不适当类型的对象。
- 常见场景:
- 调用非函数对象:let a = {}; a()
- 访问null或undefined的属性:let b = null; b.name
- 给不可写属性赋值(严格模式)
- 参数类型不匹配(如Array.prototype.map未传递函数)
- 示例:
let obj = null; obj.property; // TypeError: Cannot read property 'property' of null
4. RangeError(范围错误)
- 原因:数值超出有效范围。
- 常见场景:
- 数组长度为负数:new Array(-1)
- 递归调用栈溢出(函数调用自身太多次)
- toFixed()、toExponential()等方法的参数超出范围
- 示例:
(10).toFixed(101); // RangeError: toFixed() digits argument must be between 0 and 100
5. URIError(URI错误)
- 原因:全局URI处理函数(decodeURI, encodeURI等)使用不当。
- 示例:
decodeURI('%'); // URIError: URI malformed
6. EvalError(eval错误)
- 原因:eval()函数执行异常(现代JS中很少见,保留为兼容性)。
7. AggregateError(聚合错误)
- 原因:多个错误包装在一个错误中(如Promise.any()全部失败时)。
- 示例:
Promise.any([Promise.reject(new Error('fail1')), Promise.reject(new Error('fail2'))]) .catch(e => console.log(e)); // AggregateError: All promises were rejected
8. 自定义错误
开发者可通过 class CustomError extends Error
创建自定义错误类型。