JavaScript中的错误类型

362 阅读2分钟

在平常开发中,程序报错是不可避免的,尤其是js这个弱类型的语言,报错可太常见了。那么了解报错类型,也是必不可少的,能够在平时开发中提高自己的效率。

js 中的控制台的报错信息主要分为两大类。第一类是语法错误,这一类错误在预解析的过程中如果遇到,就会导致整个 js 文件都无法执行。另一类错误统称为异常,这一类的错误会导致在错误出现的那一行之后的代码无法执行,但在那一行之前的代码不会受到影响。

  1. 语法错误:SyntaxError
// 变量命名不规范
var 1 // Uncaught SyntaxError: Unexpected number
var 1a // Uncaught SyntaxError: Invalid or unexpected token
// 错误使用关键字
function = 1 // Uncaught SyntaxError: Unexpected token =
  1. 引用错误:Uncaught ReferenceError
// 引用一个不存在的变量时发生的错误
console.log(b) //  Uncaught ReferenceError: b is not defined
a() // Uncaught ReferenceError: a is not defined

// 将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值
console.log("a") = 1 // Uncaught ReferenceError: Invalid left-hand side in assignment
  1. 范围错误:RangeError

RangeError 是当一个值超出有效范围时发生的错误。主要的有几种情况:数组长度为负数;Number 对象的方法参数超出范围;函数堆栈超过最大值。

[].length = -1 // Uncaught RangeError: Invalid array length
new Number(1.2).toFixed(-1) //Uncaught RangeError: toFixed() digits argument must be between 0 and 100
  1. 类型错误:TypeError

变量或参数不是预期类型时发生的错误。这个应该是最常见的一个错误了。比如new一个不存在构造函数的方法,深层对象处理的时候...我个人而言,这是最常出现的报错了。

var  a = { c: 0}
a.b() // Uncaught TypeError: a.b is not a function

new 123 // Uncaught TypeError: 123 is not a constructor
  1. URIError,URL 错误 URI 相关参数不正确时抛出的错误,主要涉及encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和 unescape()六个函数。
decodeURI("%") // Uncaught URIError: URI malformed at decodeURI
  1. eval()函数执行错误:EvalError

在 ES5 以下的 JavaScript 中,当 eval()函数没有被正确执行时,会抛出 evalError 错误。我在写uni-app转换小程序的时候,编译后遇到过这个问题,当时很抠脑袋。

需要注意的是:ES5 以上的 JavaScript 中已经不再抛出该错误,但依然可以通 过 new 关键字来自定义该类型的错误提示。

以上的 6 种派生错误,连同原始的Error对象,都是构造函数。开发者可以使用它们,认为生成错误对象的实例。new Error([message[,fileName[,lineNumber]]]),第一个参数表示错误提示信息,第二个是文件名,第三个是行号。