注:本文最后更新時(shí)間:2017/03/06
前言:最近在重新翻看《你不知道的 JavaScript 》蕴茴,在作用域一章中講到了異常苫费,提到了兩種常見的錯(cuò)誤類型翁狐。這里順手將 js 的錯(cuò)誤類型整理一下准夷。
Error 類型
js 中的錯(cuò)誤類型主要有以下 6 種:SyntaxError
钥飞、TypeError
、ReferenceError
衫嵌、RangeError
读宙、EvalError
、URIError
楔绞。
這些錯(cuò)誤類型繼承自 Error
结闸, 構(gòu)造一個(gè)新的 Error 對(duì)象:
new Error([message[, fileName[, lineNumber]]])
當(dāng)錯(cuò)誤產(chǎn)生時(shí)唇兑,Error 的實(shí)例對(duì)象會(huì)被拋出。
6 種不同錯(cuò)誤類型的示例
-
SyntaxError
:語(yǔ)法錯(cuò)誤
123consloe.log(123) // Uncaught SyntaxError: Unexpected identifier
console.123) // Uncaught SyntaxError: Unexpected number
// 注意桦锄,下面這種不是語(yǔ)法錯(cuò)誤:
consloe.log(123) // Uncaught ReferenceError: consloe is not defined
-
TypeError
:類型錯(cuò)誤扎附,即值的類型非預(yù)期類型
// 下面的例子 a 為 number 類型,強(qiáng)行以函數(shù)方式調(diào)用 a
let a = 123;
a(); // Uncaught TypeError: a is not a function
-
ReferenceError
:引用錯(cuò)誤结耀,引用一個(gè)不存在的變量
// RHS
let a = b; // Uncaught ReferenceError: b is not defined
-
RangeError
:溢出錯(cuò)誤留夜,值超出了有效范圍
let a = new Array(-1); // Uncaught RangeError: Invalid array length
// 注意,下面這種不是溢出錯(cuò)誤图甜,因?yàn)閿?shù)組是一種特殊的對(duì)象
let a = [1,2,3];
console.log(a[-1]); // undefined
EvalError
:eval 函數(shù)執(zhí)行錯(cuò)誤碍粥。
這個(gè)API 是為了向下兼容。現(xiàn)在eval()
程序出錯(cuò)黑毅,引擎也會(huì)提示上面提到的具體錯(cuò)誤嚼摩,而不會(huì)拋出EvalError
,除非手動(dòng)new EvalError()
觸發(fā)錯(cuò)誤矿瘦。URIError
:URI 相關(guān)函數(shù)錯(cuò)誤使用枕面。
decodeURI('%1') // Uncaught URIError: URI malformed
- 來自 MDN 的第七種錯(cuò)誤,
InternalError
:JavaScript 引擎內(nèi)部錯(cuò)誤缚去,大部分瀏覽器都沒有實(shí)現(xiàn)這個(gè)API
潮秘。