您好,登錄后才能下訂單哦!
需要了解的JavaScript 異常類型有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
無論是瀏覽器控制臺還是 Node.js 的服務(wù)端,我們會在各種地方看到 JavaScript 異常,異常處理是編寫程序必備的基礎(chǔ)能力,在學(xué)習(xí)異常處理之前,了解 JavaScript 中的幾種異常類型是非常有必要的。
Error
Error 是最基本的錯誤類型,其他的錯誤類型都繼承自該類型。Error 對象主要有兩個重要屬性 message 和 name 分別表示錯誤信息和錯誤名稱。
程序運行過程中拋出的異常一般都有具體的類型,Error 類型一般都是開發(fā)人員自己拋出的異常。
try { throw new Error('ConardLi拋出的異常'); } catch (error) { console.log(error); }
SyntaxError - 語法錯誤
語法錯誤也稱為解析錯誤。語法錯誤在任何編程語言中都是最常見的錯誤類型,表示不符合編程語言的語法規(guī)范。
JavaScript 是一門解釋性語言,執(zhí)行一段代碼時需要經(jīng)歷 詞法分析 -> 語法分析 -> 語法樹 就可以開始解釋執(zhí)行了:
詞法分析是將字符流(char stream)轉(zhuǎn)換為記號流(token stream)、語法分析階段會將記號流(token stream)生成抽象語法樹(AST)。
在這兩個階段,如果 Javascript引擎發(fā)現(xiàn)了預(yù)期之外/無法抓換的 token,或者 token 順序和預(yù)期不一致時,就會拋出 SyntaxError。
因此 SyntaxError 應(yīng)該和其他類型的異常區(qū)分開,此類異常發(fā)生在 JavaScript解析/編譯時,此類異常一旦發(fā)生,導(dǎo)致整個js文件都無法執(zhí)行,而其他異常發(fā)生在代碼運行時,這一類的錯誤會導(dǎo)致在錯誤出現(xiàn)的那一行之后的代碼無法執(zhí)行,但在那一行之前的代碼不會受到影響。
TypeError - 類型錯誤
運行時最常見的異常,表示變量或參數(shù)不是預(yù)期類型,比如 new 關(guān)鍵字后面必須為構(gòu)造函數(shù)、()前必須為函數(shù)。
ReferenceError - 引用錯誤
引用一個不存在的變量時發(fā)生的錯誤,每當(dāng)我們創(chuàng)建或定義一個變量時,變量名稱都會寫入一個變量存儲中心中。這個變量存儲中心就像鍵值存儲一樣,每當(dāng)我們引用變量時,它都去存儲中找到 Key 并提取并返回 Value,如果我們要找的變量不在存儲中,就會拋出 ReferenceError。
請注意,如果我們調(diào)用的是一個已經(jīng)存在的變量的一個不存在的屬性,則不會拋出 ReferenceError,因為變量本身已經(jīng)在存儲中了,調(diào)用它不存在的屬性只會是未定義狀態(tài),也就是 undefined:
RangeError - 邊界錯誤
表示超出有效范圍時發(fā)生的異常,主要的有以下幾種情況:
數(shù)組長度為負(fù)數(shù)或超長
數(shù)字類型的方法參數(shù)超出預(yù)定義范圍
函數(shù)堆棧調(diào)用超過最大值
URIError - URL 錯誤在調(diào)用 URI 相關(guān)的方法中 URL 無效時拋出的異常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()幾個函數(shù):
自定義異常
另外,為了滿足各種各樣的業(yè)務(wù)需求,除了 JavaScript 已經(jīng)給定的異常類型,我們還可以自定義一些異常類型,比如我們要根據(jù)不同的異常類型給用戶不同的錯誤提示:
class UnAuthError extends Error { } class ParamError extends Error { } function controller() { throw new UnAuthError(); } try { controller(); } catch (error) { if (error instanceof UnAuthError) { return '無權(quán)限'; } if (error instanceof ParamError) { return '參數(shù)錯誤'; } }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。