JavaScript错误处理核心是try...catch语句,用于捕获并处理异常而不中断程序;支持按错误类型(SyntaxError、ReferenceError、TypeError)分别处理,finally确保清理操作执行,throw可主动抛出内置或自定义错误。
JavaScript 错误处理的核心是 try...catch 语句,它能让你在代码出错时不中断整个程序,而是捕获错误、记录信息或执行备用逻辑。
try 块中放可能出错的代码,catch 块接收并处理抛出的错误。如果 try 中没有异常,catch 就不会执行。
基本写法:
try {
// 可能出错的代码,比如访问 undefined 属性、JSON.parse 无效字符串
JSON.parse('{ "name": "Alice"'); // 缺少右括号 → SyntaxError
} catch (error) {
console.error('解析失败:', error.message);
// 可以在这里做降级处理,比如显示默认数据
}
不是所有错误都该一视同仁。你可以通过判断 error.constructor.name 或 error instanceof 区分错误类型,再分别处理:
JSON.
parse、eval 或动态代码执行时console.log(notExist))示例:
try {
doSomething();
} catch (error) {
if (error instanceof TypeError) {
console.warn('类型错误,跳过操作');
} else if (error instanceof SyntaxError) {
console.error('数据格式异常,请检查输入');
} else {
console.error('未知错误:', error);
}
}
加上 finally 块,适合做清理工作,比如关闭加载状态、释放资源:
let loading = true;
try {
await fetch('/api/data');
} catch (error) {
console.error(error);
} finally {
loading = false; // 确保 loading 总会关闭
}
用 throw 主动抛出错误,配合 try catch 实现业务校验:
throw '用户名不能为空'(简单但不推荐)throw new Error('用户名不能为空')(保留堆栈,更规范)
class ValidationError extends Error {
constructor(field, message) {
super(`${field}: ${message}`);
this.name = 'ValidationError';
}
}
// 使用
try {
if (!username) throw new ValidationError('username', '必填项');
} catch (error) {
if (error instanceof ValidationError) {
showErrorMessage(error.message);
}
}