JavaScript错误调试

Posted zhonghonglin1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript错误调试相关的知识,希望对你有一定的参考价值。

错误调试与处理 2-1 语法错误

语法错误:
  不符合js语法的错误,控制台会告知出错的行号(但行号不一定准确)。
 
 
常见语法错误:
  1,符号漏错多少打。
  2,使用了不合语法的变量名。(关键字,保留字不能做变量名)。
  3,语句写错,没写完等。
 
 
错误提示:
   Uncaught SyntaxError:Unexpected token xxx //未预料到xxx。
 
identifier:变量名。
 
逗号表达式将会返回最后一个表达式的结果

技术分享图片 错误调试与处理 2-2 运行时错误

运行时错误(Runtime Error):
  代码没有语法错误,而在运行的时候才发生的错误。运行时错误时一个统称。
 
常见运行时错误:
ReferenceError,变量引用异常触发。(变量未定义就开始使用)。
  Uncaught ReferenceError(未捕获到的引用错误):foo is not defined(...)。
 
TypeError,类型使用错误时触发。(1,获取未初始化的变量的属性或方法。2,定义了一个变量值为数字,结果把该变量当成了函数并调用)。
  1,Uncaught TypeError:Cannot read property ‘length‘ of undefined(...)。无法读取undefined的length属性。
  2,Uncaught TypeError:bar is not a function(...)。bar不是一个函数。
 
RangeError,不太常见,一般会在递归爆栈时触发,即递归深度太深(例如函数自身调用自身,无限不停止)。(一般浏览器最高可以递归1024层)。
  Uncaught RangeError:Maximum call stack size exceeded(...)。最大的调用栈超出大小。
解决方式:将递归用循环来写
 
调用栈:
技术分享图片 
如何区分语法错误与运行时错误:
  语法错误无论如何都不可能运行成功,
  运行时错误时有可能运行成功的。

错误调试与处理 2-4 逻辑错误

逻辑错误:
  计算结果不符合预期。 使用单步跟踪调试debugger,在控制台查看。
 
 
Watch:显示变量值,可自动添加,删除。
F8:恢复执行。
F10:跳过下个函数,当做一行代码执行,不想看函数内部的执行,单步执行。
F11:进入函数内部查看。
shift+F11:跳出函数内部的执行。
在控制台的代码中点击行数可设置Breakpoints断点,再点一次删除断点。
 
鼠标放在变量上,也会显示变量值,也可自己在控制台输入查看,甚至是改变值。
技术分享图片 

错误调试与处理 2-5 try-catch语句

主动触发错误:
   当发生一些不可避免的错误时,可以使用下面的语句来抛出这个错误。
throw new Error("错误描述");//抛出错误
 
 
开发中不建议使用prompt函数,用户体验不是很好。
 
try {}
catch(e) {}
无论任何时候,throw了一个错误,之后的代码不会运行,这个错误会一直往外找try(错误的冒泡),所以会出错的地方需要用try包裹,找到后接着这个错误会被catch(e)里的变量e接收,并在catch(e){这里可以提示错误。} 
 
运行时错误也可被trycatch捕获
try{}//如果里面没有错误,则不会执行catch,但是finally还是会执行
catch(e){}//try内有错误才会执行,错误对象赋值给catch括号内的变量,执行完catch再执行finally,若是在catch里return了一个值,依旧会执行finally,若在finally里也return了一个值,那么return的值会时finally里的。
finally{}//做一些清理性的工作,finally块时一定会执行的
 
浏览器会先从前往后解析代码,语法错误在解析过程中就出错了。其实语句都还没开始执行,就已经出错了。无法被trycatch捕获。
 
技术分享图片 

finally里一般拿来做一些善后清理工作

try块里出现错误的话,会立即跳出try块,找到匹配的错误,执行catch块里的语句

此时,可能在try块里打开的文件没关闭,连接的网络没断开,对这些浪费的内存就不能及时释放回收。

如果有finally块的话,不管有没有出错,都会执行finally块里的内容。就能实现使用finally清理了。

 

 

使用try catch,在js出现错误的时候,把异常捕获掉,这样程序仍能正常运行下去,如下:

1
2
3
console.log(i);
var a = 5;
console.log(++a);

因为i 未定义,出现错误,那么js就卡在这里了,后面 a 的结果不执行了。

看看使用try catch

1
2
3
4
5
6
7
try {
   console.log(i);
   }catch(e) {
       console.log(e)
    }
var a = 6;
console.log(++a);

那么,i 未定义的错误被捕获掉了,程序仍能继续运行下去,最后输出a的结果是6.





以上是关于JavaScript错误调试的主要内容,如果未能解决你的问题,请参考以下文章

Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示(代码片段

常用Javascript代码片段集锦

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

javascript 错误与调试

node.exe调试JavaScript代码

使用浏览器自带的javascript调试器