网站首页 > 技术文章 正文
JS本身是动态语言,因此人们普遍认为它是一种最难于调试的编程语言。脚本出错时,由于没有上下文信息,让人摸不着头脑,ECMAScript 第 3 版致力于解决这个问题,专门引入了try-catch和throw等语句以及一些错误类型,意在让开发人员能够适当地处理错误,提升开发效率
浏览器错误提示
- IE
发生JS错误时,浏览器左下角会出现一个黄色的图标,双击这个图标,就会看到一个包含错误消息的对话框,其中还包含诸如行号、字符数、错误代码及文件名等相关信息
- Firefox & Chrome & Opera
发生JS错误时,浏览器不会给出提示,你必须进入到控制台,查看错误信息。控制台显示错误消息、引发错误的 URL 和错误所在的行号等信息。单击文件名即可以只读方式打开发生错误的脚本,发生错误的代码行会突出显示
- Safari
Safari在默认情况下都会隐藏全部JS错误信息,你必须启用开发者菜单才能查看这些信息
错误处理 - 自带语法
- try-catch语句
try { // 可能会导致错误的代码 // try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行捕获 // 此时catch块会接收到一个包含错误信息的对象 // throw语句抛出错误信息 throw new Error('error message') } catch(error) { // 在错误发生时怎么处理 console.log(error.message) // message是所以浏览器都支持的属性,推荐使用 // 不同浏览器增加了不同的error属性 - IE 添加了与 message 属性完全相同的 description 属性,还添加了保存 着内部错误数量的number属性 - Firefox添加了fileName、lineNumber和stack(包含栈跟踪信息) 属性 - Safari添加line(表示行号)、sourceId(表示内部错误代码)和sourceURL属性 }
- finally
try { // 可能会导致错误的代码 } catch(error) { // 错误处理语句 } finally { // 必定执行语句,不受try & catch操作的影响,最终结果以它为准 }
- window.onerror()
// 当JS监控到错误发生的时候触发该方法 注:只要发生错误,无论是不是浏览器生成的,都会触发error事件,并执行这个事件处理 程序。然后,浏览器默认的机制发挥作用,像往常一样显示出错误消息。像下面这样在 事件处理程序中返回false,可以阻止浏览器报告错误的默认行为。 window.onerror = function(message, source, lineno, colno, error) { console.log('...'); return false; }
错误处理 - 单元测试框架
几个常见的前端单元测试框架,这边简单介绍Jest,其它也有许多优秀的框架这边就不做过多概述了
其它优秀框架:Mocha/Jasmine/AVA/Tape等
- Jest(会专门整理一篇文章)
优点 - 较好的支持React(facebook开发) - 基于 Jasmine 至今已经做了大量修改添加了很多特性 - 开箱即用配置少,API简单 - 支持断言和仿真,支持快照测试 - 在隔离环境下测试 - 互动模式选择要测试的模块 - 优雅的测试覆盖率报告,基于Istanbul - 智能并行测试,全局环境支持 - 拥有功能强大的模拟库 - Typescript兼容 举个简单的例子 - 新建一个js文件,测试 function total(a,b){ return a+b; } - 再次新建一个js文件,并引入我们刚才创建js文件 const total = require('./total'); // test()函数来描述一个测试用例 test('testName', () => { expect(total(1, 2)).toBe(3); // toBe("通过条件") }); - 配置脚本,执行npm run test,显示测试成果 通过则显示成功结果,不通过则显示当前返回结果和预期返回结果
错误类型
- Error
基础错误类型,其它错误类型都继承于该类型
- EvalError
EvalError 类型的错误会在使用 eval()函数而发生异常时被抛出 new eval(); //抛出EvalError eval = foo; //抛出EvalError
- RangeError
RangeError 类型的错误会在数值超出相应范围时触发
- ReferenceError
访问不存在的变量时,就会发生这种错误
- SyntaxError
当我们把语法错误的 JavaScript 字符串传入 eval()函数时,就会导致此类错误
- TypeError
在变量中保存着意外的类型时,或者在访问不存在的 方法时,都会导致这种错误。错误的原因虽然多种多样,但归根结底还是由于在执行特定于类型的操作 时,变量的类型并不符合要求所致。
- URIError
在使用 encodeURI()或 decodeURI(),而 URI 格式不正确时,就会导致 URIError 错误
总结
没有人的代码是完美无缺的,在编码过程中错误是相对难以避免的,那么当问题出现的时候我们怎么去比较好的发现它,并解决它就成了一个首当其冲的问题了。从原生代码层次我们可以通过try-catch和window.onerror和单元测试框架来使得我们代码更具鲁棒性,提升开发效率
参考资料
参考资料:JavaScript高级程序设计
- 上一篇: 为什么测试在前端如此重要?
- 下一篇: SpringBoot单元测试之常见框架和注解
猜你喜欢
- 2025-05-22 一天涨 23k Star 的开源项目「GitHub 热点速览」
- 2025-05-22 如何选择VueJS的两个API Composition API或者Options API
- 2025-05-22 「评测」 声色——海贝 Crystal6 多单元动铁耳机
- 2025-05-22 常用的七种性能测试
- 2025-05-22 接口测试及其测试流程
- 2025-05-22 Java开发中的自动化测试框架:从零开始玩转测试工具
- 2025-05-22 别克君越1.5t机电单元维修
- 2025-05-22 前端代码Review,一次性掰扯明白!
- 2025-05-22 C++语言的单元测试与代码覆盖率
- 2024-09-22 vue入门:使用mockjs搭建vue项目测试服务器
你 发表评论:
欢迎- 05-23浅谈3种css技巧——两端对齐
- 05-23JSONP安全攻防技术
- 05-23html5学得好不好,看掌握多少标签
- 05-23Chrome 调试时行号错乱
- 05-23本文帮你在Unix上玩转C语言
- 05-23Go 中的安全编码 - 输入验证
- 05-2331个必备的python字符串方法,建议收藏
- 05-23Dynamics.js – 创建逼真的物理动画的 JS 库
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)