Javascript学习之错误处理
throw语句
使用throw
语句抛出一个异常。当抛出异常,规定一个含有值的表达式要被抛出。可以抛出任意表达式而不是特定一种类型的表达式。
throw expression;
示例:
function UserException(excMessage) { this.excMessage = excMessage; this.excName = "UserException"; } UserException.prototype.toString = function () { return this.excName + ":" + this.excMessage; } throw new UserException("this is an exception!!!"); throw "Error2"; // String type throw 42; // Number type throw true; // Boolean type throw {message: function() { return "1111111111"; } };
在抛出异常时声明一个对象,就可以在catch块中查询到对象的属性。
try...catch语句
try...catch
语句标记一块待尝试的语句,并规定一个以上的响应应该有一个异常被抛出。如果我们抛出一个异常,try...catch
语句就捕获它。
try...catch
语句有一个包含一条或者多条语句的try代码块,0个或1个的catch
代码块,catch代码块中的语句会在try代码块中抛出异常时执行。
如果try代码块中的语句(或者try
代码块中调用的方法)一旦抛出了异常,那么执行流程会立即进入catch
代码块。如果try代码块没有抛出异常,catch代码块就会被跳过。
finally
代码块总会紧跟在try和catch代码块之后执行,但会在try和catch代码块之后的其他代码之前执行。
finally
块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally
块里的语句也会执行。
示例:
function getMonthName(mon) { let months = ["Jan","Feb","Mar","Apr","May","Jun","Jul", "Aug","Sep","Oct","Nov","Dec"]; if (months.includes(mon)) { return mon; } else { throw "InvalidMonthNo"; } } try { let monthName = getMonthName("Mayyyy"); console.log(monthName); }catch (e) { console.log("exception:" + e); }finally{ console.log("excute finally!!"); }