偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

你需要了解的幾種 JavaScript 異常類型

系統(tǒng) Linux
無論是瀏覽器控制臺(tái)還是 Node.js 的服務(wù)端,我們會(huì)在各種地方看到 JavaScript 異常,異常處理是編寫程序必備的基礎(chǔ)能力,在學(xué)習(xí)異常處理之前,了解 JavaScript 中的幾種異常類型是非常有必要的。

無論是瀏覽器控制臺(tái)還是 Node.js 的服務(wù)端,我們會(huì)在各種地方看到 JavaScript 異常,異常處理是編寫程序必備的基礎(chǔ)能力,在學(xué)習(xí)異常處理之前,了解 JavaScript 中的幾種異常類型是非常有必要的。

Error

Error 是最基本的錯(cuò)誤類型,其他的錯(cuò)誤類型都繼承自該類型。Error 對(duì)象主要有兩個(gè)重要屬性 message 和 name 分別表示錯(cuò)誤信息和錯(cuò)誤名稱。

程序運(yùn)行過程中拋出的異常一般都有具體的類型,Error 類型一般都是開發(fā)人員自己拋出的異常。

  1. try { 
  2.   throw new Error('ConardLi拋出的異常'); 
  3. } catch (error) { 
  4.   console.log(error); 

SyntaxError - 語法錯(cuò)誤

語法錯(cuò)誤也稱為解析錯(cuò)誤。語法錯(cuò)誤在任何編程語言中都是最常見的錯(cuò)誤類型,表示不符合編程語言的語法規(guī)范。

JavaScript 是一門解釋性語言,執(zhí)行一段代碼時(shí)需要經(jīng)歷 詞法分析 -> 語法分析 -> 語法樹 就可以開始解釋執(zhí)行了:

詞法分析是將字符流(char stream)轉(zhuǎn)換為記號(hào)流(token stream)、語法分析階段會(huì)將記號(hào)流(token stream)生成抽象語法樹(AST)。

在這兩個(gè)階段,如果 Javascript引擎發(fā)現(xiàn)了預(yù)期之外/無法抓換的 token,或者 token 順序和預(yù)期不一致時(shí),就會(huì)拋出 SyntaxError。

 

因此 SyntaxError 應(yīng)該和其他類型的異常區(qū)分開,此類異常發(fā)生在 JavaScript解析/編譯時(shí),此類異常一旦發(fā)生,導(dǎo)致整個(gè)js文件都無法執(zhí)行,而其他異常發(fā)生在代碼運(yùn)行時(shí),這一類的錯(cuò)誤會(huì)導(dǎo)致在錯(cuò)誤出現(xiàn)的那一行之后的代碼無法執(zhí)行,但在那一行之前的代碼不會(huì)受到影響。

TypeError - 類型錯(cuò)誤

運(yùn)行時(shí)最常見的異常,表示變量或參數(shù)不是預(yù)期類型,比如 new 關(guān)鍵字后面必須為構(gòu)造函數(shù)、()前必須為函數(shù)。

ReferenceError - 引用錯(cuò)誤

引用一個(gè)不存在的變量時(shí)發(fā)生的錯(cuò)誤,每當(dāng)我們創(chuàng)建或定義一個(gè)變量時(shí),變量名稱都會(huì)寫入一個(gè)變量存儲(chǔ)中心中。這個(gè)變量存儲(chǔ)中心就像鍵值存儲(chǔ)一樣,每當(dāng)我們引用變量時(shí),它都去存儲(chǔ)中找到 Key 并提取并返回 Value,如果我們要找的變量不在存儲(chǔ)中,就會(huì)拋出 ReferenceError。

請(qǐng)注意,如果我們調(diào)用的是一個(gè)已經(jīng)存在的變量的一個(gè)不存在的屬性,則不會(huì)拋出 ReferenceError,因?yàn)樽兞勘旧硪呀?jīng)在存儲(chǔ)中了,調(diào)用它不存在的屬性只會(huì)是未定義狀態(tài),也就是 undefined:

RangeError - 邊界錯(cuò)誤

表示超出有效范圍時(shí)發(fā)生的異常,主要的有以下幾種情況:

  • 數(shù)組長度為負(fù)數(shù)或超長
  • 數(shù)字類型的方法參數(shù)超出預(yù)定義范圍
  • 函數(shù)堆棧調(diào)用超過最大值

URIError - URL 錯(cuò)誤在調(diào)用 URI 相關(guān)的方法中 URL 無效時(shí)拋出的異常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()幾個(gè)函數(shù):

自定義異常

另外,為了滿足各種各樣的業(yè)務(wù)需求,除了 JavaScript 已經(jīng)給定的異常類型,我們還可以自定義一些異常類型,比如我們要根據(jù)不同的異常類型給用戶不同的錯(cuò)誤提示:

  1. class UnAuthError extends Error { } 
  2.  
  3. class ParamError extends Error { } 
  4.  
  5. function controller() { 
  6.   throw new UnAuthError(); 
  7.  
  8. try { 
  9.   controller(); 
  10. } catch (error) { 
  11.   if (error instanceof UnAuthError) { 
  12.     return '無權(quán)限'; 
  13.   }  
  14.   if (error instanceof ParamError) { 
  15.   return '參數(shù)錯(cuò)誤'; 
  16.   }  

 

責(zé)任編輯:趙寧寧 來源: code秘密花園
相關(guān)推薦

2020-12-09 09:30:57

前端開發(fā)技術(shù)

2022-07-29 09:17:46

JavaScriptReactJS學(xué)習(xí)

2012-06-27 09:11:47

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2015-07-15 13:34:37

JS開發(fā)習(xí)慣

2015-09-17 09:36:46

Chrome改變

2022-02-22 23:39:15

JavaScript編程語言Web

2016-11-01 16:41:08

直通網(wǎng)線連接端口傳輸數(shù)據(jù)

2022-01-04 19:28:05

VMware云端虛擬化

2022-03-18 12:46:56

Go 語言編程語言

2021-01-26 01:03:36

云原生工具云原生

2020-09-23 13:40:01

信用卡欺詐網(wǎng)絡(luò)釣魚攻擊

2021-08-06 06:51:15

TypeScript Any 類型

2015-10-22 17:20:46

命令工具Linux

2019-07-18 12:57:21

大數(shù)據(jù)互聯(lián)網(wǎng)算法

2010-11-23 13:34:12

微軟Lync

2023-05-18 09:00:00

人工智能StarCoder編程語言

2021-03-15 08:04:08

VMware虛擬機(jī)MSC認(rèn)證

2021-05-19 09:40:14

Android 12Android
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)