注:本文最后更新時間:2017/03/06
前言:最近在重新翻看《你不知道的 JavaScript 》,在作用域一章中講到了異常,提到了兩種常見的錯誤類型。這里順手將 js 的錯誤類型整理一下。
Error 類型
js 中的錯誤類型主要有以下 6 種:SyntaxError
、TypeError
、ReferenceError
、RangeError
、EvalError
、URIError
。
這些錯誤類型繼承自 Error
, 構造一個新的 Error 對象:
new Error([message[, fileName[, lineNumber]]])
當錯誤產生時,Error 的實例對象會被拋出。
6 種不同錯誤類型的示例
-
SyntaxError:語法錯誤
123consloe.log(123) // Uncaught SyntaxError: Unexpected identifier
console.123) // Uncaught SyntaxError: Unexpected number
// 注意,下面這種不是語法錯誤:
consloe.log(123) // Uncaught ReferenceError: consloe is not defined
-
TypeError:類型錯誤,即值的類型非預期類型
// 下面的例子 a 為 number 類型,強行以函數(shù)方式調用 a
let a = 123;
a(); // Uncaught TypeError: a is not a function
-
ReferenceError:引用錯誤,引用一個不存在的變量
// RHS
let a = b; // Uncaught ReferenceError: b is not defined
-
RangeError:溢出錯誤,值超出了有效范圍
let a = new Array(-1); // Uncaught RangeError: Invalid array length
// 注意,下面這種不是溢出錯誤,因為數(shù)組是一種特殊的對象
let a = [1,2,3];
console.log(a[-1]); // undefined
EvalError:eval 函數(shù)執(zhí)行錯誤。
這個API 是為了向下兼容?,F(xiàn)在eval()程序出錯,引擎也會提示上面提到的具體錯誤,而不會拋出EvalError,除非手動new EvalError()觸發(fā)錯誤。URIError:URI 相關函數(shù)錯誤使用。
decodeURI('%1') // Uncaught URIError: URI malformed
- 來自 MDN 的第七種錯誤,
InternalError:JavaScript 引擎內部錯誤,大部分瀏覽器都沒有實現(xiàn)這個API。