实用Javascript调试技巧分享(小结)


Posted in Javascript onJune 18, 2019

见过太多同学调试Javascript只会用简单的console.log甚至alert,看着真为他们捉鸡。。因为大多数同学追求优雅而高效地写代码,却忽略了如何优雅而高效地调试代码,不得不说是有点“偏科”了。下面我就分享一些实用且聪明的调试技巧,希望能让大家调试自己代码的时候更加从容自信。

1. 不要使用alert

首先,alert只能打印出字符串,如果打印的对象不是String,则会调用toString()方法将该对象转成字符串(比如转成[object Object]这种),所以除非你打印String类型的对象,其他什么信息都获取不到。其次,alert会阻塞UI和javascript的执行,必须点击'OK'按钮才能继续,非常低效。所以,喜欢使用alert的同学可以改改这个习惯了。

2. 学会使用console.log

console.log谁都会用,但是很多同学只知道最简单的console.log(x)这样打印一个对象,当你的代码里面console.log多了之后,会很难将某条打印结果和代码对应,所以我们可以给打印信息加上一个标签便于区分:

let x = 1;
console.log('aaaaaaaa', x);

得到:

实用Javascript调试技巧分享(小结)

标签不一定要有明确的含义,视觉效果显著就可以了,当然有明确意义更好。

事实上,console.log可以接收任意多的参数,最后将这些对象拼接输出,比如:

实用Javascript调试技巧分享(小结)

如果打印信息过多,不容易找到目标信息的话,可以在控制台中进行过滤:

实用Javascript调试技巧分享(小结)

注意点

在使用console.log打印一个引用类型(比如数组和自定义对象)的对象的时候,输出结果可能并不是执行console.log方法那个时间点的值。举个例子:

实用Javascript调试技巧分享(小结)

可以发现两个console.log输出的结果展开后都是[1, 2, 3, 4],因为数组是引用类型,所以在展开后获取到的都是数组最新的状态。我们可以使用JSON.parse(JSON.stringify(...))来解决这个问题:

实用Javascript调试技巧分享(小结)

3. 学会使用console.dir

我们有时候想看看一个DOM对象里面到底有什么属性和方法,但是常规的console.log打印出来的只是HTML标签,就像这样:

实用Javascript调试技巧分享(小结)

和直接审查元素没有什么区别。

如果我们想看到DOM对象作为JavaScript对象的结构可以使用console.dir,比如:

实用Javascript调试技巧分享(小结)

事实上,console.dir可以打印出任何JavaScript对象的属性列表,比如打印一个方法:

实用Javascript调试技巧分享(小结)

4. 学会使用console.table

我们经常会遇到这样的场景:获取到一个用户列表,每个用户有很多属性,但是我们只想查看其中的某些属性,在用console.log打印出来的时候需要把每个用户对象展开一个个查看,非常麻烦。而console.table完美的解决这个问题,比如我只想获取到下列用户的id和坐标:

console.log打印结果:

实用Javascript调试技巧分享(小结)

console.table打印结果:

实用Javascript调试技巧分享(小结)

非常的准确和快速!

5. 学会使用console.time

有时候我们想知道一段代码的性能或者一个异步方法需要运行多久,这时候需要用到定时器,JavaScript提供了现成的console.time方法,例如:

实用Javascript调试技巧分享(小结)

6. 使用debugger打断点

有时候我们需要打断点进行单步调试,一般会选择在浏览器控制台直接打断点,但这样还需要先去Sources里面找到源码,然后再找到需要打断点的那行代码,比较费时间。使用debugger关键词,我们可以直接在源码中定义断点,方便很多,比如:

实用Javascript调试技巧分享(小结)

7. 查到源码文件

有时候我们想在控制台的Sources中查找某个js源文件,要把文件夹逐一点开找,非常麻烦。其实Chrome提供了文件的搜索功能,只不过大部分时候我们给忽略了。。

实用Javascript调试技巧分享(小结)

只要按Command + P(windows的快捷键请自行查看)就能弹出搜索框搜索你想要找的文件啦:

实用Javascript调试技巧分享(小结)

8. 压缩JS文件的阅读

有时候我们需要在Sources中阅读一段js代码,但是发现它被压缩了,Chrome也提供了和方便的格式化工具,让代码变得重新可读:

实用Javascript调试技巧分享(小结)

点完之后变成这样:

实用Javascript调试技巧分享(小结)

以上就是我个人在平时比较常用的一些调试小技巧,如果大家有其他好的调试技巧也欢迎分享,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
Jquery如何实现点击时高亮显示代码
Jan 22 Javascript
详解JavaScript语法对{}处理的坑爹之处
Jun 05 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
Nov 12 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
angular写一个列表的选择全选交互组件的示例
Jan 22 Javascript
js中的闭包学习心得
Feb 06 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
Apr 26 Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 #Javascript
小程序click-scroll组件设计
Jun 18 #Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 #Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 #Javascript
JS删除String里某个字符的方法
Jan 06 #Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 #Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 #Javascript
You might like
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
解决Django no such table: django_session的问题
2020/04/07 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
掌上明珠Java程序员面试总结
2016/02/23 面试题
应届生英语教师求职信
2013/11/05 职场文书
贷款担保书
2015/01/20 职场文书
2015年简历自我评价范文
2015/03/11 职场文书