SyntaxError
SyntaxError 是解析代码时发生的语法错误
syntax [‘sintæks] 语法;句法;有秩序的排列
1 | // 变量名错误 |
ReferenceError
ReferenceError 是引用一个不存在的变量时发生的错误。
reference [‘refərəns] 参考,参照;涉及,提及;参考书目;介绍信;证明书
- 变量未定义
1 | console.log(unknow); |
- 另一种触发场景是,将一个值分配给无法分配的对象,比如对函数的运行结果或者 this 赋值。
1 | console.log() = 1 |
RangeError
RangeError 是当一个值超出有效范围时发生的错误。主要有几种情况,一是数组长度为负数,二是 Number 对象的方法参数超出范围,以及函数堆栈超过最大值。
range [reindʒ] 范围;幅度
- 数组长度为负数
1 | var a= new Array(-1); |
- 数字超出范围
1 | (1234).toExponential(21) |
toExponential() 方法可把对象的值转换成指数计数法。
返回值
NumberObject.toExponential(num)
返回 NumberObject 的字符串表示,采用指数计数法,即小数点之前有一位数字,小数点之后有 num 位数字。该数字的小数部分将被舍入,必要时用 0 补足,以便它达到指定的长度。
抛出
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
TypeError
TypeError 是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用 new 命令,就会抛出这种错误,因为 new 命令的参数应该是一个构造函数。
1 | ('a').toExponential(19) |
URLError(URL错误)
与url相关函数参数不正确,主要是 encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape() 这六个函数。
1 | document.write("http://www.w3school.com.cn/My first/"); |
EvalError
eval 函数没有被正确执行时,会抛出 EvalError 错误。该错误类型已经不再在 ES5 中出现了,只是为了保证与以前代码兼容,才继续保留。
以上这6种派生错误,连同原始的Error对象,都是构造函数。开发者可以使用它们,人为生成错误对象的实例。
1 | new Error("出错了!"); |
上面代码表示新建错误对象的实例,实质就是手动抛出错误。可以看到,错误对象的构造函数接受一个参数,代表错误提示信息(message)。