聊聊JavaScript中的try...catch使用小技巧
作為一名web前端工程師,JavaScript中的
try...catch
是我們常用的特性之一,用于處理代碼中可能出現(xiàn)的錯(cuò)誤。之所以需要它是因?yàn)楫?dāng)執(zhí)行JavaScritp
發(fā)生錯(cuò)誤時(shí),會(huì)停止執(zhí)行接下來(lái)的程序,出現(xiàn)的異常會(huì)導(dǎo)致程序崩潰 , 所以使用try...catch
來(lái)處理代碼中可能出現(xiàn)的錯(cuò)誤信息
try語(yǔ)句允許我們定義在執(zhí)行時(shí)進(jìn)行錯(cuò)誤測(cè)試的代碼塊
catch 語(yǔ)句允許我們定義當(dāng) try 代碼塊發(fā)生錯(cuò)誤時(shí),所執(zhí)行的代碼塊
舉一個(gè)簡(jiǎn)單的例子
在下面的例子中,我們故意在 try 塊的代碼中寫了一個(gè)錯(cuò)的關(guān)鍵字。 該實(shí)例本應(yīng)該提醒"前端工程師!",但彈出的是錯(cuò)誤信息(ReferenceError: alaert is not defined
)。 catch 塊會(huì)捕捉到 try 塊中的錯(cuò)誤,并執(zhí)行代碼來(lái)處理它。
try { alaert("前端工程師!"); } catch (error) { console.log(error); }
更多實(shí)例
<p>請(qǐng)輸入 5 和 10 之間的一個(gè)數(shù):</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">檢測(cè)輸入</button> <p id="message"></p>
<script> function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "為空"; if(isNaN(x)) throw "不是一個(gè)數(shù)字"; if(x > 10) throw "太大了"; if(x < 5) throw "太小了"; } catch(err) { message.innerHTML = "輸入的值 " + err; } } </script>
該實(shí)例檢測(cè)輸入的值是否錯(cuò)誤,如果錯(cuò)誤則拋出異常。
異常通過 catch 語(yǔ)句捕獲,并輸出自定義信息
捕獲所有異常
try { // 可能會(huì)拋出異常的代碼 } catch { // 處理所有異常的代碼 }
這種方式會(huì)捕獲所有異常,包括語(yǔ)法錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤和自定義錯(cuò)誤
注意:在生產(chǎn)環(huán)境中使用時(shí),建議具體指定要捕獲的異常類型,以便更好地診斷問題
捕獲異步異常
如果你使用了異步代碼,你可能需要捕獲異步代碼中的異常。例如,以下代碼塊使用 Promise
來(lái)異步加載資源
try { const resource = await fetch("/resource"); // 處理資源的代碼 } catch (error) { // 處理異常的代碼 }
如果在異步操作中發(fā)生異常,它會(huì)被傳遞到 catch
代碼塊中。但是,如果你沒有使用 try...catch
來(lái)捕獲異常,它將被視為未處理的異常。
finally
finally()
方法返回一個(gè) Promise。在 promise 結(jié)束時(shí),無(wú)論結(jié)果是 fulfilled 或者是 rejected,都會(huì)執(zhí)行指定的回調(diào)函數(shù)
try { tryCode; //嘗試執(zhí)行代碼塊 } catch (err) { catchCode; //捕獲錯(cuò)誤的代碼塊 } finally { finallyCode; // 無(wú)論 try / catch 結(jié)果如何都會(huì)執(zhí)行的代碼塊 }
拋出異常
try...catch
不僅可以捕獲異常,還可以拋出異常。你可以使用 throw
語(yǔ)句在代碼中手動(dòng)拋出異常
function divide(a, b) { if (b === 0) { throw new Error("除數(shù)不能為零"); } return a / b; }
如果在 divide
函數(shù)中 b
的值為 0
,則會(huì)拋出一個(gè)包含錯(cuò)誤消息的異常。你可以使用 try...catch
來(lái)捕獲這個(gè)異常并執(zhí)行相應(yīng)的操作
捕獲錯(cuò)誤并忽略它們
有時(shí),在調(diào)試代碼時(shí),你可能希望暫時(shí)忽略一些錯(cuò)誤。你可以使用空的 catch
代碼塊來(lái)忽略異常
try { // 可能會(huì)拋出異常的代碼 } catch { // 忽略異常 }
但是,建議不要在生產(chǎn)環(huán)境中使用這種方式。在生產(chǎn)環(huán)境中忽略異??赡軙?huì)導(dǎo)致代碼無(wú)法預(yù)料的行為
結(jié)論
try...catch
是一個(gè)強(qiáng)大的異常處理工具。如果沒有try/catch的話,就有可能出現(xiàn)異常導(dǎo)致程序崩潰,而try/catch 則可以保證程序的正常運(yùn)行,努力學(xué)好這個(gè)工具,可以確保在編寫代碼的過程減少一些不必要的麻煩
以上就是JavaScript中的try...catch使用小技巧的詳細(xì)內(nèi)容,更多關(guān)于JavaScript try...catch使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序?qū)崿F(xiàn)點(diǎn)擊生成隨機(jī)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)點(diǎn)擊生成隨機(jī)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09原生JS forEach()和map()遍歷的區(qū)別、兼容寫法及jQuery $.each、$.map遍歷操作
這篇文章主要介紹了原生JS forEach()和map()遍歷的區(qū)別、兼容寫法及jQuery $.each、$.map遍歷操作,結(jié)合實(shí)例形式分析了JS使用forEach()和map()以及jQuery使用$.each、$.map進(jìn)行遍歷操作相關(guān)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-02-02詳解使用Next.js構(gòu)建服務(wù)端渲染應(yīng)用
這篇文章主要介紹了詳解使用Next.js構(gòu)建服務(wù)端渲染應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-07-07基于JS實(shí)現(xiàn)小區(qū)樓的電梯運(yùn)行程序
本文介紹了如何使用JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的小區(qū)樓電梯運(yùn)行程序,用戶可以通過點(diǎn)擊樓層來(lái)選擇目標(biāo)樓層,并模擬電梯的上下行,文章還提示了如何擴(kuò)展該程序,例如添加更多樓層、優(yōu)化移動(dòng)邏輯和添加動(dòng)畫效果,感興趣的朋友一起看看吧2025-01-01js動(dòng)態(tài)修改表格行colspan列跨度的方法
這篇文章主要介紹了js動(dòng)態(tài)修改表格行colspan列跨度的方法,實(shí)例分析了javascript動(dòng)態(tài)修改html中table屬性的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03JavaScript實(shí)現(xiàn)隨機(jī)替換圖片的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)隨機(jī)替換圖片的方法,涉及javascript中Math.random方法的靈活運(yùn)用,需要的朋友可以參考下2015-04-04JavaScript+HTML?實(shí)現(xiàn)網(wǎng)頁(yè)錄制音頻與下載
在這個(gè)數(shù)字化的時(shí)代,網(wǎng)頁(yè)端的音頻處理能力已經(jīng)成為一個(gè)非常熱門的需求,本文將詳細(xì)介紹如何利用 getUserMedia 和 MediaRecorder 這兩個(gè)強(qiáng)大的 API,實(shí)現(xiàn)網(wǎng)頁(yè)端音頻的錄制、處理和播放等功能,需要的朋友可以參考下2024-07-07