十七、错误处理与调试
17.1 浏览器报告的错误
17.1.1 IE
17.1.2 Firefox
17.1.3 Safari
17.1.4 Opera
17.1.5 Chrome
17.2 错误处理
17.2.1 try-catch语句
try{
...
}catch(error){
alert(error.message);
}
17.2.1.1 finally子句
17.2.1.2 错误类型
17.2.1.3 合理使用try-catch
17.2.2 抛出错误
- 可以抛出任意类型的对象
- throw { name : “javascript” };
- 可以抛出内置错误类型
- throw new Error(message);
- 可以创建自定义错误类型
17.2.2.1 抛出错误的时机
- 在某种特定条件(例如参数必须为数组等)下,执行函数失败时抛出错误
17.2.2.2 抛出错误与使用try-catch
- 抛出错误的目的在于提供错误发生具体原因的消息
- try-catch的目的在于避免浏览器以默认方式处理它们
17.2.3 错误(error)事件
- 任何未被捕获的错误都将触发window对象的error事件
- window对象的error事件不会创建event对象,只接收三个参数
- <image>也支持error事件
- src指定的URL无法返回能被识别的图像格式则会触发该事件
- 会创建event对象
17.2.4 处理错误的策略
17.2.5 常见的错误类型
17.2.5.1 类型转换错误
17.2.5.2 数据类型错误
17.2.5.3 通信错误
17.2.6 区分致命错误和非致命错误
- 非致命错误
- 不影响用户的主要任务
- 只影响页面的一部分
- 可以恢复
- 重复相同操作可以消除错误
- 致命错误
- 应用程序根本无法继续运行
- 错误明显影响到了用户的主要操作
- 会导致其他连带错误
17.2.7 把错误记录到服务器
- catch到错误之后,将错误信息发送到服务器集中管理
- 标注错误来自前端
17.3 调试技术
17.3.1 将消息记录到控制台
17.3.2 将消息记录到当前页面
17.3.3 抛出错误
17.4 常见的IE错误
17.4.1 操作终止
17.4.2 无效字符
17.4.3 未找到成员
17.4.4 未知运行时错误
17.4.5 语法错误
- 引用了外部javascript文件,但该文件最终并没有返回javascript代码
- 内部语法错误
17.4.6 系统无法找到指定资源