- Error:是基类型,其他错误类型继承该类型。所有错误类型都共享相同的属性(所有错误对象上的方法都是这个默认类型定义的方法),浏览器很少抛出Error类型的错误,该类型主要用于开发者抛出自定义错误。例如promise中的catch拦截器拦截Error。
new Promise(function(resolve,reject){
reject('操作失败') })
.then(function(result){
console.log(result)
})
.catch(function(error){
console.log(error)
})
2. InternalError类型的错误会在底层JavaScript引擎抛出异常时由浏览器抛出。例如递归过多导致了栈溢出。这个类型并不是代码中通常要处理的错误,如果真的发生了,很可能代码哪里弄错有危险了。
3. EvalError类型的错误会在使用Eval()函数发生异常时抛出,基本上只要不把eval()当成函数调用就会抛出该错误,不同浏览器可能抛出的还并不同。
4. RangeError会在数值越界时抛错。例如,定义数组时候如果设置了并不支持的长度,如-20或者Number.MAX_VALUE,就会抛出该错。
5. ReferenceError会在找不到对象时抛出。(这就是著名的'Object expected'浏览器错误的原因),这种错误经常是由访问不存在的变量导致的。 例如下面:在x没有提前声明时会抛出错误。
6. SyntaxError经常在给eval()传入的字符串包含JavaScript语法错误时发生,比如下面:
在eval()外部很少会用到SyntaxError,这是因为JavaScript中的语法错误会导致代码无法执行。
7. TypeError主要发生在变量不是预期类型,或者访问不存在的方法时。很多原因可能导致这种错误,尤其是在使用类型特定的操作而变量类型不对时。例如:
在给参数传参之前没有验证其类型的情况下,类型错误频繁发生。
8. URIEError只会在使用encodeURI()或decodeURI()但传入了格式错误的URI时发生。但是非常罕见,因为上面这两个函数非常稳健。