前言

调试技巧,在任何一项技术研发中都可谓是必不可少的技能。掌握各种调试技巧,必定能在工作中起到事半功倍的效果。譬如,快速定位问题、降低故障概率、帮助分析逻辑错误等等。而在互联网前端开发越来越重要的今天,如何在前端开发中降低开发成本,提升工作效率,掌握前端开发调试技巧尤为重要。
本文将一一讲解各种前端JS调试技巧,也许你已经熟练掌握,那让我们一起来温习,也许有你没见过的方法,不妨一起来学习,也许你尚不知如何调试,赶紧趁此机会填补空白。
一、‘debugger;'
除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断点。你也可以在一些条件控制中插入该调试语句,譬如:
if (thisThing) {
debugger;
}
二、将Objects以表格形式展示
有时候我们需要看一些复杂的对象的详细信息,最简单的方法就是用console.log然后展示成一个列表状,上下滚动进行浏览。不过似乎用console.table展示成列表会更好呦,大概是介个样子:
var animals = [
{ animal: 'Horse', name: 'Henry', age: 43 },
{ animal: 'Dog', name: 'Fred', age: 13 },
{ animal: 'Cat', name: 'Frodo', age: 18 }
];
console.table(animals);
三、多屏幕尺寸测试
Chrome有一个非常诱人的功能就是能够模拟不同设备的尺寸,在Chrome的Inspector中点击toggle device mode按钮,然后就可以在不同的设备屏幕尺寸下进行调试咯:
四、在Console快速选定DOM元素
在Elements选择面板中选择某个DOM元素然后在Console中使用该元素也是非常常见的一个操作,Chrome Inspector会缓存最后5个DOM元素在它的历史记录中,你可以用类似于Shell中的$0等方式来快速关联到元素。譬如下图的列表中有‘item-4′, ‘item-3', ‘item-2', ‘item-1', ‘item-0'这几个元素,你可以这么使用:
五、获取某个函数的调用追踪记录
JavaScript框架极大方便了我们的开发,但是也会带来大量的预定义的函数,譬如创建View的、绑定事件的等等,这样我们就不容易追踪我们自定义函数的调用过程了。虽然JavaScript不是一个非常严谨的语言,有时候很难搞清楚到底发生了啥,特别是当你需要审阅其他人的代码的时候。这时候console.trace就要起作用咯,它可以帮你进行函数调用的追踪。譬如下面的代码中我们要追踪出car对象中对于funcZ的调用过程:
var car;
var func1 = function() {
func2();
}
var func2 = function() {
func4();
}
var func3 = function() {
}
var func4 = function() {
car = new Car();
car.funcX();
}
var Car = function() {
this.brand = ‘volvo';
this.color = ‘red';
this.funcX = function() {
this.funcY();
}
this.funcY = function() {
this.funcZ();
}
this.funcZ = function() {
console.trace(‘trace car')
}
}
func1();
这边就可以清晰地看出func1调用了func2,然后调用了func4,func4创建了Car的实例然后调用了car.funcX。
六、格式化被压缩的代码
有时候在生产环境下我们发现了一些莫名奇妙的问题,然后忘了把sourcemaps放到这台服务器上,或者在看别人家的网站的源代码的时候,结果就看到了一坨不知道讲什么的代码,就像下图。Chrome为我们提供了一个很人性化的反压缩工具来增强代码的可读性,大概这么用:
七、快速定位调试函数
当我们想在函数里加个断点的时候,一般会选择这么做:
1.在Inspector中找到指定行,然后添加一个断点
2.在脚本中添加一个debugger调用
不过这两种方法都存在一个小问题就是都要到对应的脚本文件中然后再找到对应的行,这样会比较麻烦。这边介绍一个相对快捷点的方法,就是在console中使用debug(funcName)然后脚本会在指定到对应函数的地方自动停止。这种方法有个缺陷就是无法在私有函数或者匿名函数处停止,所以还是要因时而异:
var func1 = function() {
func2();
};
var Car = function() {
this.funcX = function() {
this.funcY();
}
this.funcY = function() {
this.funcZ();
}
}
var car = new Car();
八、禁止不相关的脚本运行
当我们开发现代网页的时候都会用一些第三方的框架或者库,它们几乎都是经过测试并且相对而言Bug较少的。不过当我们调试我们自己的脚本的时候也会一不小心跳到这些文件中,引发额外的调试任务。解决方案呢就是禁止这部分不需要调试的脚本运行,详情可见这篇文章:: javascript-debugging-with-black-box。
在较复杂的调试情况下发现关键元素 在一些复杂的调试环境下我们可能要输出很多行的内容,这时候我们习惯性的会用console.log, console.debug, console.warn, console.info, console.error这些来进行区分,然后就可以在Inspector中进行过滤。不过有时候我们还是希望能够自定义显示样式,你可以用CSS来定义个性化的信息样式:
console.todo = function(msg) {
console.log(‘ % c % s % s % s‘, ‘color: yellow; background - color: black;', ‘–‘, msg, ‘–‘);
}
console.important = function(msg) {
console.log(‘ % c % s % s % s', ‘color: brown; font - weight: bold; text - decoration: underline;', ‘–‘, msg, ‘–‘);
}
console.todo(“This is something that' s need to be fixed”);
console.important(‘This is an important message');
在console.log()中你可以使用%s来代表一个字符串 , %i 来代表数字, 以及 %c 来代表自定义的样式。
九、监测指定函数的调用与参数
在Chrome中可以监测指定函数的调用情况以及参数:
var func1 = function(x, y, z) {
};
这种方式能够让你实时监控到底啥参数被传入到了指定函数中。
十、Console中使用$进行元素查询
在Console中也可以使用来进行类似于querySelector那样基于CSS选择器的查询,(‘css-selector') 会返回满足匹配的第一个元素,而$$(‘css-selector') 会返回全部匹配元素。注意,如果你会多次使用到元素,那么别忘了将它们存入变量中。
十一、Postman
很多人习惯用Postman进行API调试或者发起Ajax请求,不过别忘了你浏览器自带的也能做这个,并且你也不需要担心啥认证啊这些,因为Cookie都是自带帮你传送的,这些只要在network这个tab里就能进行,大概这样子:
十二、DOM变化检测
DOM有时候还是很操蛋的,有时候压根不知道啥时候就变了,不过Chrome提供了一个小的功能就是当DOM发生变化的时候它会提醒你,你可以监测属性变化等等:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。
相关文章:
MySQL查询结果复制到新表的方法(更新、插入)
如何在建站主机中优化服务器配置?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
如何续费美橙建站之星域名及服务?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
香港服务器选型指南:免备案配置与高效建站方案解析
如何有效防御Web建站篡改攻击?
c# await 一个已经完成的Task会发生什么
,想在网上投简历,哪几个网站比较好?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在云主机上快速搭建网站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
建站org新手必看:2024最新搭建流程与模板选择技巧
制作营销网站公司,淘特是干什么用的?
详解jQuery中基本的动画方法
Python lxml的etree和ElementTree有什么区别
宝塔新建站点报错如何解决?
建站为何优先选择香港服务器?
建站之星安装路径如何正确选择及配置?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何在宝塔面板中创建新站点?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何用搬瓦工VPS快速搭建个人网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
网站app免费制作软件,能免费看各大网站视频的手机app?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
香港服务器建站指南:免备案优势与SEO优化技巧全解析
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
网站制作服务平台,有什么网站可以发布本地服务信息?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何在建站宝盒中设置产品搜索功能?
如何在VPS电脑上快速搭建网站?
网站代码制作软件有哪些,如何生成自己网站的代码?
建站主机默认首页配置指南:核心功能与访问路径优化
公司门户网站制作流程,华为官网怎么做?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
浅谈Javascript中的Label语句
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
制作电商网页,电商供应链怎么做?
如何快速查询域名建站关键信息?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站之星多图banner生成与模板自定义指南
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
,柠檬视频怎样兑换vip?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Android自定义控件实现温度旋转按钮效果
*请认真填写需求信息,我们会在24小时内与您取得联系。