异常处理
抛出异常
在JavaScript中,你可以使用throw语句来手动抛出异常。当你在代码中遇到了某种错误或者条件不符合预期时,你可以使用throw语句来创建一个新的异常对象并将其抛出。这样可以中断程序的执行,并且在调用堆栈中向上传递这个异常,直到遇到一个能够处理它的异常处理器或者直到它达到了全局执行环境。
下面是一个简单的例子,演示了如何在JavaScript中使用throw语句抛出异常:
function divide(x, y) {
if (y === 0) {
throw new Error("除数不能为零");
}
return x / y;
}
try {
console.log(divide(10, 0));
} catch (error) {
console.error("发生错误:" + error.message);
}在这个例子中,divide函数用来计算两个数的商。如果除数y为零,就会抛出一个带有指定消息的异常。在try块中,我们调用divide函数并尝试捕获可能抛出的异常。如果在try块中抛出了异常,控制流就会转到catch块,我们可以在那里处理异常。
捕获异常
在JavaScript中,你可以使用try...catch语句来捕获异常。try块中的代码被执行,如果在执行过程中抛出了异常,那么控制流会立即跳转到相应的catch块。catch块用于捕获并处理异常,你可以在其中执行一些特定的操作,比如记录错误、向用户显示错误消息或者执行其他的错误处理逻辑。
以下是一个示例,演示了如何使用try...catch语句来捕获异常:
function divide(x, y) {
if (y === 0) {
throw new Error("除数不能为零");
}
return x / y;
}
try {
console.log(divide(10, 2)); // 正常情况下不会抛出异常
console.log(divide(10, 0)); // 这里会抛出异常
console.log(divide(10, 5)); // 这行代码不会被执行
} catch (error) {
console.error("发生错误:" + error.message);
}在这个例子中,我们调用了divide函数三次。第一次调用时,除数不为零,没有抛出异常。第二次调用时,除数为零,抛出了异常。由于我们在try块中调用了这个函数,所以异常被try...catch语句捕获到,控制流转移到了catch块中,并输出了错误消息。第三次调用并不会执行,因为异常已经在前一次调用中被捕获了。
示例1
try {
console.log('try begin~')
console.log('try end~')
} finally {
console.log('finally~')
}
/*
try begin~
try end~
finally~
*/示例2
try {
console.log('try begin~')
throw new Error('这是一个异常')
console.log('try end~')
} finally {
console.log('finally~')
}
/*
try begin~
finally~
Error: 这是一个异常
*/示例3
try {
console.log('try begin~')
throw new Error('这是一个异常')
console.log('try end~')
} catch {
console.log('捕获异常并处理')
} finally {
console.log('finally~')
}
/*
try begin~
捕获异常并处理
finally~
*/