标签:语句 抛出 JS try finally catch throw
文章目录
throw 语句:
throw语句
用来抛出一个用户自定义的异常。- 当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。
- 如果调用者函数中没有catch块,程序将会终止。
throw "Error2"; // 抛出了一个值为字符串的异常
throw 42; // 抛出了一个值为整数42的异常
throw true; // 抛出了一个值为true的异常
function getRectArea(width, height) {
if (isNaN(width) || isNaN(height)) {
throw 'Parameter is not a number!';
}
}
try {
getRectArea(3, 'A');
} catch (e) {
console.error(e);
// "Parameter is not a number!"
}
try 语句:
try...catch
:语句标记要尝试的语句块,并指定一个出现异常时抛出的响应。catch(e)
中的参数e
: 用来保存被抛出声明指定的值。你可以用这个标识符来获取关于被抛出异常的信息
try { // 书写可能会抛出异常的语句
nonExistentFunction();
} catch (error) { // try 抛出异常时触发
console.error(error);
// 预期输出:ReferenceError: nonExistentFunction未定义
// 注意:错误消息将根据浏览器的不同而不同
}
openMyFile() // 打开一个文件
try { // 书写可能会抛出异常的语句
// 占用资源
writeMyFile(theData); // 操作文件
}finally { // try 抛出异常或没有异常都会触发
closeMyFile(); // 总是关闭文件
}
try { // 书写可能会抛出异常的语句
throw "myException"; // 生成一个异常
}catch (e) { // try 抛出异常时触发
// catch 语句用来处理任何异常
logMyErrors(e); // 将异常对象传递给错误处理程序
}finally { // try 抛出异常或没有异常都会触发
console.log("finally 执行了"); // finally 总是会执行
}
嵌套用法:
- 条件catch子句:
try {
myRoutine();
} catch (e) {
if (e instanceof RangeError) {
// 语句来处理这个非常常见的预期错误
} else {
throw e; // 重新抛出错误
}
}
- 嵌套 try
try {
try {
throw new Error("oops");
}
finally {
console.log("finally");
}
}
catch (ex) {
console.error("outer", ex.message);
}
/* 预期输出 */
// "finally"
// "outer" "oops"
- 在 try 语句中,通过增加一个 catch 语句块捕获了异常
try {
try {
throw new Error("oops");
}
catch (ex) {
console.error("inner", ex.message);
}
finally {
console.log("finally");
}
}
catch (ex) {
console.error("outer", ex.message);
}
/* 预期输出 */
// "inner" "oops"
// "finally"
- 在 try 语句中,嵌套的 catch 语句块再次抛出错误
try {
try {
throw new Error("oops");
}
catch (ex) {
console.error("inner", ex.message);
throw ex;
}
finally {
console.log("finally");
}
}
catch (ex) {
console.error("outer", ex.message);
}
/* 预期输出 */
// "inner" "oops"
// "finally"
// "outer" "oops"
标签:语句,抛出,JS,try,finally,catch,throw 来源: https://blog.csdn.net/qq_45677671/article/details/119897375
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。