中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中有哪些原生錯誤類型

發布時間:2021-04-29 15:46:55 來源:億速云 閱讀:124 作者:Leah 欄目:開發技術

JavaScript中有哪些原生錯誤類型?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

JavaScript的作用是什么

1、能夠嵌入動態文本于HTML頁面。2、對瀏覽器事件做出響應。3、讀寫HTML元素。4、在數據被提交到服務器之前驗證數據。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創建和修改等。7、基于Node.js技術進行服務器端編程。

1. RangeError

當數字超出允許的值范圍時,將會拋出此錯誤。

例如

const l = console.logconst arr = [90,88]
arr.length=90**99

我們有一個數組,帶有兩個元素的 arr。接下來,嘗試將數組擴展為包含90**99 == 2.9512665430652753e+193個元素。

這個數字超出了數組大小可以增長的范圍。運行它會拋出 RangeError:

$ node errors

errors.js:4

arr.length=90**99

 ^RangeError: Invalid array length

因為我們要增加 arr 數組的大小超出了 JS 指定的范圍。

2. ReferenceError

當對變量或項目的引用被破壞時,將會引發此錯誤。那是變量或項目不存在。

例如

const l=console.logconst cat = "cat"
cat
dog

有一個變量cat被初始化為 “cat”。接下來引用了cat變量和dog變量。cat變量存在,而dog變量不存在。

cat將返回 “cat”,而dog將引發引用錯誤,因為在環境記錄中找不到名稱dog。

$ node errors

errors.js:3

dog

^ReferenceError: dog is not defined

每當我們創建或定義變量時,變量名稱都會寫入環境記錄中。環境記錄就像鍵值存儲一樣,

+-------------+

| Key | Value |

---------------

| cat | "cat" |

+-------------+

每當我們引用變量時,它都會存儲程序中定義的變量。當在記錄中找到環境值并提取并返回值時,將以該變量的名稱作為關鍵字在環境記錄進行搜索。調用尚未定義的函數。

現在,當我們創建或定義一個沒有賦值的變量時。變量將其鍵作為變量名寫入環境記錄,但其值將會保持未定義的狀態。

var catenv record

+-----------------+

| Key | Value |

-------------------

| cat | undefined |

+-----------------+

稍后為變量分配值時,將在環境記錄中搜索該變量,當發現它未定義值時,該賦值將被覆蓋。

var cat

cat = "cat"env record

+-------------+

| Key | Value |

---------------

| cat | "cat" |

+-------------+

所以當在環境記錄中找不到變量名時,JS 引擎將引發 RefernceError。

+-------------+

| Key | Value |

---------------

| cat | "cat" |

+-------------+cat // "cat", yes, :) it's there

dog // :( what's this? can't find it

注意:未定義的變量不會拋出 ReferenceError,因為它在于環境記錄中的值尚未設置。

3. SyntaxError

這是最常見的錯誤。當我們輸入 JS 引擎不能理解的代碼時,就會發生這個錯誤。

JS 引擎在解析期間捕獲了這個錯誤。在 JS 引擎中,我們的代碼經歷了不同的階段,然后才能在終端上看到結果。

  • 標記化

  • 解析

  • 解釋

標記化將代碼的源分解為各個單元。在此階段,將對數字、關鍵字、文字、運算符進行分類并分別標記。

接下來,生成的標記流將會傳遞到解析階段,由解析器處理。這是從標記流生成 AST 的地方。 AST 是代碼結構的抽象表示。

在標記化和解析這兩個階段,如果我們代碼的語法不符合 JS 的語法規則,則會使該階段失敗并引發 SyntaxError。例如:

const l = console.loglet cat h = "cat"

代碼中的 “h” 代表什么?這個 “h” 破壞了代碼。

$ node errors

errors.js:3

let cat h = "cat"

 ^SyntaxError: Unexpected identifier

看,Node.js 指出了問題的所在。它說 “h” 是意外的,它破壞了cat 變量的聲明。

因此,可以說語法錯誤在解析或編譯期間發生。

4. TypeError

當其他 NativeError 對象中沒有適當的失敗原因的指示時,TypeError 用于指示操作失敗。

對錯誤的數據類型執行操作時會發生 TypeError,例如:

如果我們嘗試將數字轉換為大寫,如下所示:

const num = 123
num.toUpperCase()

這將引發TypeError

$ node errors

errors.js:4

num.toUpperCase()

 ^TypeError: num.toUpperCase is not a function

因為toUpperCase函數需要字符串數據類型。toUpperCase函數是有意通用的;它不需要其this值是String對象。因此,可以將其轉移到其他種類的對象中用作方法。

只有字符串才會轉換為大寫或小寫形式,如果我們在 Objects、Boolean、Symbol、null、undefined 數據類型上調用toUpperCase函數,則將會得到 TypeError,因為它操作的數據類型錯誤。

5. URIError

這表明使用了一種與其定義不兼容的全局 URI 處理函數。

JS 中的 URI(統一資源指示符)具有以下功能:decodeURI、decodeURIComponent 等。

如果我們用錯誤的參數去調用其中任何一個,將得會到一個 URIError。

decodeURI("%")
^URIError: URI malformed

encodeURI用于獲取 URI 的未編碼版本。 “%” 不是正確的 URI,因此引發了URIError。

當 URI 編碼或解碼出現問題時,會引發 URIError。

6. EvalError

當使用全局eval()函數時,這用于識別錯誤。

根據 EcmaSpec 2018 版:

此規范當前未使用此異常。保留它目的是為了與本規范的先前版本兼容。

7. InternalError

該錯誤在 JS 引擎內部發生,特別是當它有太多數據要處理并且棧增長超過其關鍵限制的時侯。

當 JS 引擎被過多的遞歸和切換情況等淹沒時,就會發生這種問題

switch(num) {
 case 1:
 ...
 break
 case 2:
 ...
 break
 case 3:
 ...
 break
 case 4:
 ...
 break
 case 5:
 ...
 break
 case 6:
 ...
 break
 case 7:
 ...
 break
 ... up to 1000 cases
 }

以下是一個簡單的過多遞歸的例子:

function foo() {
    foo()
}
foo()

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊吾县| 宁陕县| 福州市| 新绛县| 策勒县| 徐水县| 密云县| 镇安县| 哈尔滨市| 内丘县| 鹤壁市| 上栗县| 黄陵县| 济宁市| 会昌县| 禄劝| 周至县| 开封县| 株洲市| 宁安市| 丰都县| 乌海市| 武川县| 泰兴市| 滨州市| 济南市| 巴彦淖尔市| 沂源县| 哈尔滨市| 盱眙县| 五常市| 客服| 迭部县| 宜宾市| 乳山市| 太仓市| 昌都县| 靖西县| 舒兰市| 哈密市| 莱芜市|