JavaScript红宝书16-错误处理和调试(Error Handling and Debugging)

95 阅读2分钟

JavaScript一直有着众所周知的毛病,很难进行调试,因为是动态的语言且没有合适的开发工具,动不动就会在浏览器的控制台里面看见比如object expected这种不知道说了些啥的错误,第三个版本的ECMAScript

的目标就是改善这种情况引入了try-catch,throw机制,2008年后大多数浏览器支持了JavaScript调试

错误处理

基本的try-catch就不说了,说一下错误类型,所有的错误类型都是继承自Error的这个类型,错误的主要类型包括:

InternalError:这个错误通常是JavaScript引擎抛出错误,比如栈溢出了

EvalError:一般是配合调用eval()函数才会抛出的错误

TypeError:JavaScript中最常见的错误,当变量接收到不是需要的类型,会抛出错误

URIError:URI错误只会出现在编码和解码的情况下

RangeError:数组越界,超出范围了

错误事件

任何未被try-catch处理的错误都会触发窗口对象的错误事件,错误事件是浏览器最早支持的事件,其形式主要浏览器都向后兼容。错误处理器在任何浏览器都不会创建事件对象,可以接收三个参数,错误信息、错误出现的URL、错误出现的行数。

错误处理策略

JavaScript的错误处理策略非常重要,一但JavaScript出现错误,就会导致web页面崩掉,理解什么时候,为什么出现错误是非常重要的。大多数用户不动技术,基本会尝试刷新解决问题,或者就不去尝试了,程序员应该知道何时代码会出现怎样的错误

识别什么地方也许出现错误

错误处理最重要的部分是,首先,识别在代码中哪里会出现错误,由于JavaScript是弱类型语言,并且函数不进行参数验证,主要会出现这三类错误:

类型转换错误

数据类型错误

交流错误

调试技术

控制台runtime

浏览器控制台是一个REPL(read-eval-print loop)读取-执行-打印循环,和页面上的JavaScript运行时并发执行,命令在控制台内部执行可以像页面级的JavaScript一样的方式,访问全局变量和大量的API。

JavaScript debugger

在ECMAScript 5.1规范之后,在指定位置使用debug语句就可以使程序停止在对应位置,当运行时遇到这个关键字,所有主流浏览器都会打开控制台并且在对应位置设置断点。