(1)SyntaxError數組
SyntaxError是解析代碼時發生的語法錯誤ide
// 變量名錯誤 var 1a; // 缺乏括號 console.log 'hello');
(2)ReferenceError函數
ReferenceError是引用一個不存在的變量時發生的錯誤。this
unknownVariable // ReferenceError: unknownVariable is not defined
spa
另外一種觸發場景是,將一個值分配給沒法分配的對象,好比對函數的運行結果或者this賦值。console.log() = 1 // ReferenceError: Invalid left-hand side in assignment this = 1 // ReferenceError: Invalid left-hand side in assignment
上面代碼對函數console.log的運行結果和this賦值,結果都引起了ReferenceError錯誤code
(3)RangeErrororm
RangeError是當一個值超出有效範圍時發生的錯誤。主要有幾種狀況,一是數組長度爲負數,二是Number對象的方法參數超出範圍,以及函數堆棧超過最大值。對象
new Array(-1) // RangeError: Invalid array length (1234).toExponential(21) // RangeError: toExponential() argument must be between 0 and 20
(4)TypeError開發
TypeError是變量或參數不是預期類型時發生的錯誤。好比,對字符串、布爾值、數值等原始類型的值使用new命令,就會拋出這種錯誤,由於new命令的參數應該是一個構造函數。字符串
new 123 //TypeError: number is not a func var obj = {}; obj.unknownMethod() // TypeError: undefined is not a function
上面代碼的第二種狀況,調用對象不存在的方法,會拋出TypeError錯誤。
(5)URIError
URIError是URI相關函數的參數不正確時拋出的錯誤,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()這六個函數。
decodeURI('%2') // URIError: URI malformed
(6)EvalError
eval函數沒有被正確執行時,會拋出EvalError錯誤。該錯誤類型已經再也不在ES5中出現了,只是爲了保證與之前代碼兼容,才繼續保留。
以上這6種派生錯誤,連同原始的Error對象,都是構造函數。開發者能夠使用它們,人爲生成錯誤對象的實例。
new Error("出錯了!");
new RangeError("出錯了,變量超出有效範圍!");
new TypeError("出錯了,變量類型無效!");
上面代碼表示新建錯誤對象的實例,實質就是手動拋出錯誤。能夠看到,錯誤對象的構造函數接受一個參數,表明錯誤提示信息(message)。