ECMS中定义了以下八种错误类型,并在错误发生时抛出不同的错误对象。
Error
InternalError
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
Error
Error
是最基本的错误类型,其他的错误类型都继承自该类型。因此,所有错误的类型共享了一组相同的属性。 这个类型的错误很少见。一般使用开发人员自定义抛出的错误。
1 | 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 | // 1. Syntax Error: 语法错误 |
TypeError
这个错误在JavaScript中是经常遇到的,不管是初学者还是老手。在变量中保存着以外的类型时,或者在访问不存在的方法时。都会导致这种错误。但是归根结底还是由于在执行特定于类型的操作时,变量的类型并不符合要求所致。
在给函数传参前没有验证的情况下,错误频繁发生.
URIError
URIError
只会在使用encodeURL()
或decodeURL()
但传入了格式错误的URL时发生,但非常罕见,因为上面两个函数非常稳健.