iT邦幫忙

2023 iThome 鐵人賽

DAY 16
1
Software Development

再騙小心沒朋友🥵 用LIFF實作LINE整人工具系列 第 16

[Day16] 不懂JavaScript 只好等著被整😔 例外處理篇

  • 分享至 

  • xImage
  •  

在開發程式時常常會遇到執行錯誤的狀況,今天要介紹的例外處理屬於流程控制的一種,可以蒐集錯誤訊息並處理錯誤,避免整個程式因為發生錯誤而停止執行。

JavaScript中的錯誤類型

下圖是 JavaScript 中常見的錯誤類型:

有時上述的錯誤會在使用者執行的時候出現,因此可以使用例外處理把程式拋出的錯誤訊息蒐集起來,並在程式出錯時執行指定程式碼進行錯誤後的處理。

try...catch...finally 語法

try {
   // statements
} catch (err) {
   // statements
} [finally {
   // statements
}]
  • try {} 區塊內放的是預期可能會發生錯誤的程式碼。
  • catch {} 區塊內放的是出現錯誤時,要被執行的處理程式碼。
  • err 是發生的錯誤的類型。
  • finally {} 區域可省略,是最後會被執行的程式碼。

try...catch...finally 實際範例

try {
    console.log(a);

} catch(err) {
    console.log(err.name + ': ' + err.message);
    
} finally {
    console.log("Stopping print a.");
}
  • err.name 表示錯誤類型,例如 "ReferenceError"。
  • err.message 表示詳細錯誤原因的文字訊息。

    由於執行印出未宣告的變數 a,導致程式出現 ReferenceError 錯誤,如果是直接執行console.log(a);沒有使用try...catch語法,是不會讓程式繼續執行console.log("Stopping print a.");的:

客製化錯誤訊息

如果想把ReferenceError: a is not defined的錯誤訊息翻成中文,可以用throw語法客製化錯誤訊息:

try {
    console.log(a);
	throw new Error("a 沒有被定義!");
} catch(err) {
    console.log(err.name + ': ' + err.message);
} 


可以看到使用throw語法後的錯誤類型變成 Error,詳細錯誤訊息被改成a 沒有被定義!。所以輸出的err.name、err.message 也會跟著被更改。


上一篇
[Day15] 不懂JavaScript 只好等著被整😔 物件篇
下一篇
[Day17] 不懂JavaScript 只好等著被整😔 ES6 新變數命名規則
系列文
再騙小心沒朋友🥵 用LIFF實作LINE整人工具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言