注:本文最后更新时间: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 类型,强行以函数方式调用 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
// 注意,下面这种不是溢出错误,因为数组是一种特殊的对象
let a = [1,2,3];
console.log(a[-1]); // undefined
EvalError
:eval 函数执行错误。
这个API 是为了向下兼容。现在eval()
程序出错,引擎也会提示上面提到的具体错误,而不会抛出EvalError
,除非手动new EvalError()
触发错误。URIError
:URI 相关函数错误使用。
decodeURI('%1') // Uncaught URIError: URI malformed
- 来自 MDN 的第七种错误,
InternalError
:JavaScript 引擎内部错误,大部分浏览器都没有实现这个API
。