SyntaxError:语法错误
// 1.1 变量名不符合规范
var 1 // Uncaught SyntaxError: Unexpected number
// 1.2 给关键字赋值
function = 5 // Uncaught SyntaxError: Unexpected token =
Uncaught ReferenceError:引用错误
// 2.1 引用了不存在的变量
// 至少声明了才能用,声明了不赋值是undefined
console.log(a) // Uncaught ReferenceError: a is not defined
// 特殊情况,这种情况下,使用var 打印的是undefined,使用let会报这个错误,原因变量提升
console.log(b)
{ let b = 1 }
// 2.2 给一个无法被赋值的对象赋值
console.log("abc") = 1 // Uncaught ReferenceError: Invalid left-hand side in assignment
RangeError:范围错误
// 3.1 数组长度为负数
[].length = -5 // Uncaught RangeError: Invalid array length
// 3.2 Number对象的方法参数超出范围
var num = new Number(12.34)
console.log(num.toFixed(-1)) // Uncaught RangeError: toFixed() digits argument must be between 0 and 100
TypeError类型错误
// 4.1
// 这里123这个函数不存在,但是报错是type错误,与直接执行a()的引用错误不是一个类型
123() // Uncaught TypeError: 123 is not a function
// 对象的属性没有赋值打印会是undefined,所以也是报错type
var o = {}
console.log(o.run)
o.run() // Uncaught TypeError: o.run is not a function
// 4.2 new关键字后接基本类型
var p = new 456 // Uncaught TypeError: 456 is not a constructor
URIError,URL错误
decodeURI("%") // Uncaught URIError: URI malformed at decodeURI
主要涉及的encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()函数
EvalError eval()函数执行错误
var myEval = eval;
myEval("alert('call eval')");
这种错误支持es6的环境已经不再抛出
以上的6种派生错误,连同原始的Error对象,都是构造函数。开发者可以使用它们,抛出自己判断的错误类型。