在開發中,我們無法預測所有狀況,例如伺服器回傳錯誤、使用者輸入錯誤格式、變數未定義等,但JavaScript如果在執行時遇到錯誤就會中斷整段程式,所這時候就需要用try…catch
來處理這個問題
只要我們使用try…catch
,就能攔截錯誤,繼續讓程式運作
try
:放你想嘗試執行的程式catch
:當錯誤發生時,執行這裡的程式error
:錯誤物件,可以包含message
、stack
等資訊
範例:
console.log("開始程式");
try {
let result = JSON.parse("{name:'Tom'}"); //錯誤的格式
console.log(result);
} catch (error) {
console.log("出現錯誤!");
console.log("錯誤訊息:", error.message);
}
console.log("程式繼續執行~");
try…catch
其實除了上面的結構以外還有一個沒有寫出來的部分就是finally
finally
可以用來做清理動作,例如關閉連線、重設狀態等等
範例:
try {
console.log("讀取資料中...");
throw new Error("伺服器回應超時");
} catch (err) {
console.log("錯誤:", err.message);
} finally {
console.log("結束請求");
}
也可以用throw
主動丟出錯誤
function checkAge(age) {
if (age < 0) {
throw new Error("年齡不能為負數!");
}
return "年齡正確:" + age;
}
try {
console.log(checkAge(-5));
} catch (e) {
console.log("發生錯誤:" + e.message);
}
這樣就可以控制錯誤何時出現,並在catch
裡處理了
錯誤類型 | 範例 | 說明 |
---|---|---|
ReferenceError |
console.log(x) |
變數不存在 |
TypeError |
null.toString() |
對錯誤型別操作 |
SyntaxError |
eval("foo bar") |
程式語法錯誤 |
RangeError |
new Array(-1) |
超出允許範圍 |
URIError |
decodeURI("%") |
URI 錯誤編碼 |
小練習
function safeParse(jsonString) {
try {
return JSON.parse(jsonString);
} catch (err) {
console.error("格式錯誤!", err.message);
return null;
}
}
let goodData = '{"name":"Mia"}';
let badData = '{name:"Mia"}';
console.log(safeParse(goodData)); //{ name: "Mia" }
console.log(safeParse(badData)); //格式錯誤!
今天的內容就到這裡啦,不知不覺已經24天了真感人TT...