Error實(shí)例對(duì)象是最一般的錯(cuò)誤類型,在它的基礎(chǔ)上薯酝,JavaScript 還定義了其他6種錯(cuò)誤對(duì)象。也就是說爽柒,存在Error的6個(gè)派生對(duì)象吴菠。
1、SyntaxError 對(duì)象
SyntaxError對(duì)象是解析代碼時(shí)發(fā)生的語法錯(cuò)誤浩村。
// 變量名錯(cuò)誤
var 1a;
// Uncaught SyntaxError: Invalid or unexpected token
// 缺少括號(hào)
console.log 'hello');
// Uncaught SyntaxError: Unexpected string
2做葵、ReferenceError 對(duì)象
ReferenceError對(duì)象是引用一個(gè)不存在的變量時(shí)發(fā)生的錯(cuò)誤。
// 使用一個(gè)不存在的變量
unknownVariable
// Uncaught ReferenceError: unknownVariable is not defined
另一種觸發(fā)場(chǎng)景是心墅,將一個(gè)值分配給無法分配的對(duì)象蜂挪,比如對(duì)函數(shù)的運(yùn)行結(jié)果或者this賦值。
// 等號(hào)左側(cè)不是變量
console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment
// this 對(duì)象不能手動(dòng)賦值
this = 1
// ReferenceError: Invalid left-hand side in assignment
3嗓化、RangeError 對(duì)象
RangeError對(duì)象是一個(gè)值超出有效范圍時(shí)發(fā)生的錯(cuò)誤棠涮。主要有幾種情況,一是數(shù)組長(zhǎng)度為負(fù)數(shù)刺覆,二是Number對(duì)象的方法參數(shù)超出范圍严肪,以及函數(shù)堆棧超過最大值。
// 數(shù)組長(zhǎng)度不得為負(fù)數(shù)
new Array(-1)
// Uncaught RangeError: Invalid array length
4、TypeError 對(duì)象
TypeError對(duì)象是變量或參數(shù)不是預(yù)期類型時(shí)發(fā)生的錯(cuò)誤驳糯。比如篇梭,對(duì)字符串、布爾值酝枢、數(shù)值等原始類型的值使用new命令恬偷,就會(huì)拋出這種錯(cuò)誤,因?yàn)閚ew命令的參數(shù)應(yīng)該是一個(gè)構(gòu)造函數(shù)帘睦。
new 123
// Uncaught TypeError: number is not a func
var obj = {};
obj.unknownMethod()
// Uncaught TypeError: obj.unknownMethod is not a function
5袍患、URIError 對(duì)象
URIError對(duì)象是 URI 相關(guān)函數(shù)的參數(shù)不正確時(shí)拋出的錯(cuò)誤,主要涉及encodeURI()竣付、decodeURI()诡延、encodeURIComponent()、decodeURIComponent()古胆、escape()和unescape()這六個(gè)函數(shù)肆良。
decodeURI('%2')
// URIError: URI malformed
6、EvalError 對(duì)象
eval函數(shù)沒有被正確執(zhí)行時(shí)逸绎,會(huì)拋出EvalError錯(cuò)誤惹恃。該錯(cuò)誤類型已經(jīng)不再使用了,只是為了保證與以前代碼兼容棺牧,才繼續(xù)保留座舍。