終於做出時間了,卻又卡在流程問題,這次解決是否能順利回到過去?
我:那要怎麼樣避免因為流程錯誤而造成流程執行不完?
D特:有各種方法,像是流程控制、還有透過例外處理來應對
謎之音:想知道基本的流程控制可看:
(我的夥伴正在寫的流程控制系列[Day08] 流程判斷:if else 與 switch)
我:剛剛是不是有人講話?
D特:不是我,果然還是趕快離開這個空間比較好....
先來看看ECMAScript上對於它的描述:
看不懂嗎?沒關係我也是
但至少現在可知道兩件事:
try{
statement(可更多)
}catch(expression){
statement(可更多)
}finally{
statement(可更多)
}
公式解釋: try,catch,finally 分別代表?
這次改看MDN怎麼說:
he try...catch statement consists of a try block, which contains one or more statements
在正常情形下,try的內容會按照你所寫程式碼的順序來執行:
let wantToGoBackDay = new Date();
//正確順序為:
//先取得 年 > 月 > 日 > 小時 > 分鐘
try {
if(!wantToGoBackDay.setFullYear(2021))throw "我想放假QQ";
wantToGoBackDay.setMonth(8);
wantToGoBackDay.setDate(21);
wantToGoBackDay.setHours(10);
wantToGoBackDay.setMintues(15);
}catch(error){
}
這邊我要強迫你先問:上面程式碼內的throw是幹嘛的?
讓MDN來告訴你:
You may throw any expression, not just expressions of a specific type. The following code throws several exceptions of varying types:
關於throw你要知道:
catch()
才能接收到。以上一集製作時間的順序出錯為例**,這時錯誤已經被throw
拋出了接下來呢?這就是catch
登場時刻。
catch block, containing statements that specify what to do if an exception is thrown in the try block.
上面是MDN對於catch()
的解釋:
簡單來說當執行try
流程遇到錯誤時,會將錯誤內容拋出,catch()
會接收並傳入參數內,接著執行catch(){}
的內容,以下是自己目前有用到的:
Q:發生錯誤時印出訊息(console.log())
try{
fun();
}catch(error){
console.log(error.message);
}
//error,exception都是比較常用的命名
Q:發生錯誤時重新執行程式(像是函式)
function funC(){
try{
fun();
}catch(error){
console.log(error.message);
funC()
}
};
the statements in the finally block execute even if no catch block handles the exception that was thrown.
要注意!! 不論拋出的錯誤是否有catch()
去處理,都會執行finally
的內容。
那今天就到這邊摟!今天分享喜歡的歌是:
周杰倫 Jay Chou【藉口 Excuse】-Official Music Video
https://www.youtube.com/watch?v=KcK8WurGpEQ
星期天的早點休息,是為了後面的追求,明天見。