Fork me on GitHub

JavaScript错误处理

JavaScript 错误处理

语法错误

1
简单来说,语法错误就是不符合JS语法的错误。出现语法错误,控制台会进行报错并告知出错的行号(但行号不一定准确)。
常见的语法错误有
1
2
3
4
5
**符号漏打,多大,少打,错打**

**使用了不符合语法的变量名**

**语句写错了,没写完**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 语法错误: token = 符号错误
Uncaught SyntaxError: Unexpected token;

// 语法错误: token = 符号错误
Uncaught SyntaxError: Unexpected token for;

// 语法错误: ) = 符号错误
Uncaught SyntaxError: Unexpected token );

// 语法错误: else = 没有预料到接下来是else,解决方法前的if少打了结束符
Uncaught SyntaxError: Unexpected token else;

// 语法错误: function = 不合法的变量名,使用了关键字
Uncaught SyntaxError: Unexpected token function;

// 语法错误: identifier = 直接遇到了变量名,可能是前面少写了结束符
Uncaught SyntaxError: Unexpected identifier

运行时错误

1
运行时错误(Runtime Error), 指代码没有语法错误,而再**运行的时候才发生**的错误。 运行时错误是一个统称。
常见的运行时错误如下几种:

ReferenceError,变量引用异常触发

1
2
3
4
<script>
console.log(a);
</script>
// 没任何变量,

TypeError,类型使用错误时触发

1
2
3
var a = 9;
console.log( a());
// 把变量当函数调用,就会报这个错误

RangeError,不太常见,一般会在递归爆栈时触发,即递归深度太深(一般浏览器限制递归只有1024层)

如何区分语法错误与运行时错误

1
对于新手来说,语法错误跟运行时错误在仅看代码的情况下,不太容易区分。

一个简单的区分方法是:

  1. 语法错误无论如何都不可能运行成功。
  2. 运行时错误是有可能运行成功的

逻辑错误

代码的调试: debugger ,断点与单步跟踪调试

1
2
3
4
5
6
7
// 计算 1~10 的和 ,这里计算错误。  不是55
var sum = 0;
var i ;
for(var i = 0; i < 10; i++){
sum += i;
}
console.log(sum);

主动触发一个错误

对于前面的情况,主动触发一个错误。

当发生一些不可避免的错误时,可以使用下面的语句来抛出一个错误

throw 语句

发生不可避免的错误时,怎么办?

某些运行时错误不可避免

使用 try catch 语句