JavaScript通过try…catch捕获同步异常,throw抛出自定义错误,async/await或.catch()处理异步错误,并利用window.onError和unhandledrejection实现全局监听,提升程序健壮性与用户体验。

JavaScript中的错误处理是保障程序健壮性和用户体验的关键环节。通过合理的异常捕获和处理机制,可以避免程序崩溃并提供清晰的反馈信息。核心手段是使用try...catch结构、throw语句以及对异步操作的错误管理。
使用 try…catch 捕获同步异常
对于可能出错的同步代码,应包裹在try...catch块中。一旦try中的代码抛出异常,控制权立即转移到catch,防止脚本中断。
基本语法如下:
try {
// 可能出错的代码
JSON.parse(‘无效的json’);
} catch (error) {
console.error(‘解析失败:’, error.message);
}
注意catch参数通常为Error对象,包含message、name和stack等属性,可用于调试或日志记录。
立即学习“Java免费学习笔记(深入)”;
主动抛出异常与自定义错误类型
使用throw语句可手动触发异常,常用于输入验证或业务逻辑校验。
示例:
function divide(a, b) {
if (b === 0) {
throw new Error(‘除数不能为零’);
}
return a / b;
}
也可创建自定义错误类以区分不同错误类型:
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = ‘ValidationError’;
}
}
处理异步操作中的错误
异步代码如promise或async/await需要特殊处理方式。try...catch可用于async函数内部捕获Promise拒绝(rejection)。
使用async/await时:
async function fetchData() {
try {
const response = await fetch(‘/api/data’);
if (!response.ok) throw new Error(‘请求失败’);
const data = await response.json();
return data;
} catch (error) {
console.error(‘获取数据失败:’, error);
}
}
若使用原生Promise链,则应在末尾添加.catch()方法:
fetch(‘/api/data’)
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(‘出错了:’, err));
全局错误监听与日志上报
为捕捉未被处理的异常,可监听全局事件。例如,在浏览器中使用window.onerror和unhandledrejection事件。
捕获运行时错误:
window.onerror = function(message, source, lineno, colno, error) {
console.error(‘全局错误:’, error);
// 可将错误发送至服务器日志
reportErrorToServer(error);
return true; // 阻止默认错误提示
};
监听未处理的Promise拒绝:
window.addEventListener(‘unhandledrejection’, event => {
console.warn(‘未捕获的Promise拒绝:’, event.reason);
event.preventDefault(); // 抑制控制台警告
});
这类机制有助于收集生产环境中的实际问题,提升应用稳定性。
基本上就这些。合理组合局部捕获、主动抛错、异步处理和全局监听,能让JavaScript应用更可靠。关键在于不要忽略异常,而是根据上下文决定是修复、提示还是记录。


