JavaScript中八种错误类型

ECMS中定义了以下八种错误类型,并在错误发生时抛出不同的错误对象。
Error
InternalError
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError

Error

Error是最基本的错误类型,其他的错误类型都继承自该类型。因此,所有错误的类型共享了一组相同的属性。 这个类型的错误很少见。一般使用开发人员自定义抛出的错误。

1
2
new Error([message[,fileName[,lineNumber]]]),
//第一个参数表示错误提示信息,第二个是文件名,第三个是行号。

InternalError

InternalError类型的错误会在底层JavaScript引擎抛出异常时由浏览器抛出.例如,递归过多导致了栈溢出.这类型并不是代码中通常要处理的错误,如果真的发生了这种错误,很可能代码哪里弄错了或者有危险.

1
"InternalError: too much recursion"//(内部错误:递归过深)。

EvalError

EvalError类型错误会在使用eval()函数发生异常时抛出evalError错误.ECMA-262规定,’如果eval属性没有被直接调用(就是没有将其名称作为一个Identifier(标识符),也就是CallExpression中的MemberExpression).
基本上,只要不把eval()当成函数调用就会报错.
不同浏览器抛出的错误会有差异,但很少会这么使用,所以平时不常见

`需要注意的是:ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。

RangeError

这个错误会在数值超出相应范围时触发。比如使用new Array()的时候传递一个负数或者是超过数组最大长度(4,294,967,295)的数,比如Number.MAX_VALUE,Number.MIN_VALUE。注意递归爆炸也有这个错误。

ReferenceError

这个错误一般就是出现在变量找不到的情况,比如:

SyntaxError

SyntaxError 主要在语法编写出现问题时发生。

1
2
3
4
5
6
// 1. Syntax Error: 语法错误
// 1.1 变量名不符合规范
var 1 // Uncaught SyntaxError: Unexpected number
var 1a // Uncaught SyntaxError: Invalid or unexpected token
// 1.2 给关键字赋值
function = 5 // Uncaught SyntaxError: Unexpected token =

TypeError

这个错误在JavaScript中是经常遇到的,不管是初学者还是老手。在变量中保存着以外的类型时,或者在访问不存在的方法时。都会导致这种错误。但是归根结底还是由于在执行特定于类型的操作时,变量的类型并不符合要求所致。

在给函数传参前没有验证的情况下,错误频繁发生.

URIError

URIError只会在使用encodeURL()decodeURL()但传入了格式错误的URL时发生,但非常罕见,因为上面两个函数非常稳健.