JS的几种报错类型

js的控制台的报错类型主要分为两大类,一种是语法错误,这种错误直接就会导致js文件无法执行;另外一种是报错异常,这种错误会使之后的代码无法执行,但是之前的代码运行不受影响。下面分别来讲解。

SyntaxError

SyntaxError(语法错误):报错是因为在解析代码的时候发生语法错误。即写的代码不符合js编码规则。我们可以根据后面的信息提示去修改错误,当然,语法错误,浏览器会直接报错,整个代码都不会执行。

//1.变量名错误
var 2a;   //Uncaught SyntaxError: Invalid or unexpected token 

//2.括号不全
console.log 'b');  //Uncaught SyntaxError: Unexpected string 

//3.关键字赋值 
function = 3    // Uncaught SyntaxError: Unexpected token =

ReferenceError

ReferenceError(引用错误):1.调用的变量或者方法未被定义便会报此错误
2.给一个变量赋值一个无法被赋值的对象。

// 1) 引用了不存在的变量
a()// Uncaught ReferenceError: a is not defined
console.log(a);  //Uncaught ReferenceError: a is not defined 引用一个不存在的变量,值无法分配给对象
// 2) 给一个无法被赋值的对象赋值
  var a=123
  console.log(a)=123;  Uncaught ReferenceError: Invalid left-hand side in assignment

TypeError

TypeError(类型错误):变量或参数不是预期类型,比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。(说白了瞎调用)

// 1) new关键字后接基本类型
var a = new 1;  //Uncaught TypeError: 1 is not a function

// 2) 调用不存在的方法
123() // Uncaught TypeError: 123 is not a function
var o = {}
o.run() // Uncaught TypeError: o.run is not a function

RangeError

RangeError(范围错误):当一个值不在其所允许的范围或者集合中。

//最典型的错误 数组的长度不能是负数
var a = new Array(-1);  //Uncaught RangeError: Invalid array length 超出有效范围
//Number对象的方法参数超出范围
  var num = new Number(12.23);
        console.log(num.toFixed(-1)); 
        // toFixed方法 // 说明: toFixed方法的作用是将数字四舍五入为指定小数位数的数字,参数是小数点后的位数,范围为0-20.(但是负数就会报错)

URIError

URIError(URL错误):与URI相关函数参数不正确,主要是encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。(当向全局 URI 处理函数传递一个不合法的URI时,就会报错。)

decodeURI('%')  //Uncaught URIError: URI malformed

EvalError

EvalError(eval错误):eval函数没有被正确执行。在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。例如下面的情况:

var myEval = eval;
myEval("alert('call eval')");
new Error([message[fileName[lineNumber]]])
// 第一个参数表示错误提示信息,第二个是文件名,第三个是行号。

以上这6种派生错误,连同原始的Error对象,都是在开发中可以人为生成错误对象的实例。

throw new Error("出错了!"); 
throw new TypeError("出错了");

以上代码表示新建错误对象的实例,实质就是手动抛出错误。