JavaScript程式出錯型別分為哪些

dapan發表於2021-09-11

JavaScript程式出錯型別分為:1、Error;2、EvalError;3、RangeError;4、ReferenceError(引用 錯誤);5、SyntaxError(語法錯誤);6、TypeError;7、URIError。

JavaScript程式出錯型別分為哪些

本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

JavaScript中的錯誤型別

ECMA-262 定義了 7 種錯誤型別:

  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

其中,Error 是基型別(其他六種型別的父型別),其他型別繼承自它。Error 型別很少見,一般由瀏 覽器丟擲的。這個基型別主要用於開發人員丟擲自定義錯誤。

1. SyntaxError (語法錯誤):

1.1 變數名不符合規範

var 1 // Uncaught SyntaxError: Unexpected 

number
var 1a // Uncaught SyntaxError: Invalid or unexpected token

1.2 給關鍵字賦值

function = 5 // Uncaught SyntaxError: Unexpected token =

2. Uncaught ReferenceError(引用錯誤):

引用一個不存在的變數時發生的錯誤。將一個值分配給無法分配的物件,比如對函式的執行結果或者 函式賦值。

2.1 引用了不存在的變數

a(); // Uncaught ReferenceError: a is not 

defined
console.log(b); // Uncaught ReferenceError: b is not defined

2.2 給一個無法被賦值的物件賦值

console.log("abc") = 1 // Uncaught 

ReferenceError: Invalid left-hand side in assignment

3. RangeError(範圍錯誤):

RangeError 是當一個只超出有效範圍時發生的錯誤。主要的有幾種情況,第一是陣列長度為負數, 第二是 Number 物件的方法引數超出範圍,以及函式堆疊超過最大值。

3.1 陣列長度為負數

[].length = -5; // Uncaught RangeError: Invalid 

array length

3.2 Number 物件的方法引數超出範圍

var num = new Number(12.34);
console.log(num.toFixed(-1)); // Uncaught RangeError: toFixed() digits argument must be 

between 0 and 20 at Number.toFixed
// 說明: toFixed方法的作用是將數字四捨五入為指定小數位數的數字,引數是小數點後的位數,範圍為0

-20.

4. TypeError(型別錯誤):

變數或引數不是預期型別時發生的錯誤。比如使用 new 字串、布林值等原始型別和呼叫物件不存在 的方法就會丟擲這種錯誤,因為 new 命令的引數應該是一個建構函式。

4.1 呼叫不存在的方法

123(); // Uncaught TypeError: 123 is not a 

function
var o = {};
o.run(); // Uncaught TypeError: o.run is not a function

4.2 new 關鍵字後接基本型別

var p = new 456(); // Uncaught TypeError: 456 

is not a constructor

5. URIError(URL 錯誤):

主要是相關函式的引數不正確。
decodeURI("%"); // Uncaught URIError: 

URI malformed at decodeURI

::: tip 提醒: URI 相關引數不正確時丟擲的錯誤,主要涉及 encodeURI、decodeURI()、 encodeURIComponent()、decodeURIComponent()、escape()和 unescape()六個函式。 :::

6. EvalError eval()(函式執行錯誤):

在 ES5 以下的 JavaScript 中,當 eval()函式沒有被正確執行時,會丟擲 evalError 錯誤。例如 下面的情況:
var myEval = eval;
myEval("alert('call eval')");
需要注意的是:ES5以上的JavaScript中已經不再丟擲該錯誤,但依然可以透過new關鍵字來自定義該型別

的錯誤提示。

::: warning 善用 try-catch 在明明知道某個地方會產生錯誤,可以透過修改程式碼來解決的地方, 是不適合用 try-catch 的。或者是那種不同瀏覽器相容性錯誤導致錯誤的也不太適合,因為可以透過判斷 瀏覽器或者判斷這款瀏覽器是否存在此屬性和方法來解決。 :::

new Error("出錯了!");
new RangeError("出錯了,變數超出有效範圍!");
new TypeError("出錯了,變數型別無效!");

上面程式碼表示新建錯誤物件的例項,實質就是手動丟擲錯誤。可以看到,錯誤物件的建構函式接受一 個引數,代表錯誤提示資訊(message)。

熟知這些基本的錯誤型別,在發生錯誤時可以快速定位解決問題。

【推薦學習:】

以上就是JavaScript程式出錯型別分為哪些的詳細內容,更多請關注php中文網其它相關文章!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2827141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章