错误调试与处理

252 阅读2分钟

JavaScript错误处理

  • 语法错误、运行时错误、以及其解决方案
  • 逻辑错误及debugger的使用
  • try catch finally语句的使用

语法错误

  • 符号漏打、多打、少打、错打
  • 使用了不合法的变量名(保留字、关键字)
  • 语句写错、语句没写完
不符合Js语法的错误,出现语法错误,控制台会进行报错并告知出错的行号(但行号不一定准确)

  • unexpected token指的就是Js中的一个符号或者几个符号的组合
  • 为什么第三张图没有报,应该改为;是因为在Js语法中,是一个合法的表达式,[i<10,i++]就被认为是一个合法的表达式,逗号表达式将会返回最后一个逗号后面表达式的结果

  • 参数可以传函数的所以 console.log(function 到这里都是正确的

运行时错误

Runtime Error:指代码没有语法错误而在运行时候才发生的错误,运行时错误是一个统称

常见的运行时错误

  • ReferenceError:未捕获到的引用错误,变量引用异常时触发
  • TypeError:类型使用错误时触发或者获取未初始化的变量的属性或方法
  • RangeError:不太常见,一般会在递归爆栈时触发,即递归深度太深(浏览器一般最多1024层)

  • call stack:调用栈

  • 如上会形成一个等待的序列 ,这种序列我们称为调用栈

  • 避免递归的写法

区分语法与运行时错误就是 语法错误无论如何都不可能运行成功,运行时错误有可能运行成功

逻辑错误:运行结果不符合预期,都会使用断点调试进行跟踪

  • watch中可以访问到当前作用域中的变量值
  • debugger 能够在js执行时阻止往下执行

处理代码异常的语句

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

throw 语句

  • 用户体验不是很好

  • Js中NAN是不等于他自己的

  • 如果一个值不等于他自己那么他就是NaN

  • 如果走到了throw,会往外找最近的try语句(错误的冒泡),扔出的错误对象会被catch变量接住

try catch只能捕获运行时错误,语法错误在浏览器解析时就出错了

finally语句