console调试技巧
1、console.log()
我们经常会使用console.log
来打印出某个变量的值或者某个实体对象,也可以传入多个变量参数,它会按照传入顺序进行打印:
- 1. 传入一个变量
- const a = 1;
- console.log(a); // -> 1
- 2. 传入一个对象
- const foo = {a: 1};
- console.log(foo); // -> {a: 1}
- 3. 传入多个变量
- console.log(a, foo); // -> 1 {a: 1}
除此之外,它还支持格式化打印的功能,传入特定的占位符来对参数进行格式化处理,常见的占位符有以下几种:
%s
:字符串占位符%d
:整数占位符%f
:浮点数占位符%o
:对象占位符(注意是字母o
,不是数字0
)%c
: CSS样式占位符
- const string = 'Glory of Kings';
- const number = 100;
- const float = 9.5;
- const obj = {name: 'daji'};
- 1、%s 字符串占位符
- console.log('I do like %s', string); // -> I do like Golry of Kings.
- 2、%d 整数占位符
- console.log('I won %d times', number); // -> I won 100 times.
- 3、%f 浮点数占位符
- console.log('My highest score is %f', float); // -> My highest score is 9.5
- 4、%o 对象占位符
- console.log('My favorite hero is %o', obj); // -> My favorite hero is {name: 'daji'}.
- 5、%c CSS样式占位符
- console.log('I do like %c%s', 'padding: 2px 4px;background: orange;color: white;border-radius: 2px;', string);
其中CSS样式占位符效果如下:
2、console.warn()
你可以完全使用console.warn
来代替console.log
方法,但前提是该条打印信息是属于警告级别而不是普通信息级别,因此浏览器遇到一条警告级别的信息会区别对待,最明显的是它的左侧会有一个警告图标,并且背景色和文字颜色也会不一样。
相比于普通信息,警告信息会出现在上图左侧的
warning
面板中,而不是info
面板中,这样也有助于我们在一堆打印信息中快速筛选出警告信息,方便查看。
3、console.dir()
在大多数情况下,console.dir
方法的作用和console.log
作用相似,但是有一点细微的差别。
console.log
方法会将打印结果的详细信息显示完整,但是console.dir
方法只会打印出对象,不会展开详细信息,当然点击之后看到的信息和前者一样。 唯一差异比较大的地方是当我们打印HTML文档中的节点时,会有完全不一样的表现形式。例如我们使用console.log
来打印body
标签:
console.dir
方法来试试:
4、console.table()
在我们的项目开发中经常会遇到对象数组形式的列表数据,在调试过程中我们可能会使用console.log
方法打印出这些数据来进行查看,但比起前者,还可以使用一种比较可视化的方式来进行打印。
- const response = [
- {
- id: 1,
- name: 'Marry',
- age: 18,
- sex: 0
- },
- {
- id: 2,
- name: 'John',
- age: 20,
- sex: 1
- }
- ];
例如,这里准备一些列表数据:
然后我们使用console.log
来进行打印:
可以看出,我们打印出的结果并不够直接,没有给人一种一目了然的效果,接着换着使用
console.table
来打印: 可以看到,我们的列表数据被清晰完整地展现在了表格当中,同时
console.table
提供第二个可选参数用于筛选表格需要显示的列,默认为全部列都显示。 上图我们通过添加第二个参数,数组中为需要在表格中显示的字段名,这样就很方便地在结果数据中过滤掉我们不需要关心的信息。
5、console.assert()
assert
即断言,该方法接收多个参数,其中第一个参数为输入的表达式,只有在该表达式的值为false
时,才会将剩余的参数输出到控制台中。
上图中的第二行因为
arr.length > 5
值为false
,因此打印出后面的信息。如果在某些场景下你需要评估当前的数据是否满足某个条件,那么不妨使用console.assert()
方法来在控制台中查看断言信息。
6、console.trace()
该方法用于在控制台中显示当前代码在堆栈中的调用路径,通过这个调用路径我们可以很容易地在发生错误时找到原始错误点,示例如下:
- function foo(data) {
- if (data === null) {
- console.trace();
- return [];
- }
- return [data.a, data.b];
- }
- function bar1(data) {
- return foo(data);
- }
- function bar2(data) {
- return foo(data);
- }
- bar1({a: 1, b: 2}); // -> [1, 2]
- bar2(null); // -> []
在上面代码中,我们分别在bar1
和bar2
函数中调用foo
函数并传入不同的参数,很显然bar2
函数在执行时会进入if
语句并执行console.trace()
方法,以下是控制台中打印结果:

bar2
函数中传入了不合适的参数null
而导致出错,方便我们跟踪发生错误的原始位置。
7、console.count()
该方法相当于一个计数器,用于记录调用次数,并将记录结果打印到控制台中。其接收一个可选参数console.count(label)
,label
表示指定标签,该标签会在调用次数之前显示,示例如下:
- for (let i = 1;i <= 5;i++) {
- if (!(i % 2)) {
- console.count('even');
- } else {
- console.count('odd');
- }
- }
代码中如果i
是偶数,则会对even
计数器进行计数,否则对odd
计数器进行计数,执行后我们会在控制台中看到如下列表:
- odd: 1
- even: 1
- odd: 2
- even: 2
- odd: 3
8、console.time() & console.timeEnd()
这两个方法一般配合使用,是JavaScript中用于跟踪程序执行时间的专用函数,console.time
方法是作为计算的起始时间,console.timeEnd
是作为计算的结束时间,并将执行时长显示在控制台。如果一个页面有多个地方需要使用到计算器,则可以为方法传入一个可选参数label
来指定标签,该标签会在执行时间之前显示。在以往我们计算程序的执行时间时,我们一般会采用如下方式:
const startTime = performance.now();
let sum = 0;
for(let i = 0;i < 100000;i++) {
sum += i;
}
const diffTime = performance.now() - startTime;
console.log(`Execution time: ${ diffTime }`);
复制代码
这是一种比较传统的做法,我们还可以使用console.time
来实现:
- console.time('sum');
- let sum = 0;
- for(let i = 0;i < 100000;i++) {
- sum += i;
- }
- console.timeEnd('sum');
控制台效果如下:
相比于第一种实现方式,我们没有设置任何临时变量并且没有做任何计算。
9、console.group() & console.groupEnd()
顾名思义,对数据信息进行分组,其中console.group()
方法用于设置分组信息的起始位置,该位置之后的所有信息将写入分组,console.groupEnd()
方法用于结束当前的分组,示例如下:
- class MyClass {
- constructor() {
- console.group('Constructor');
- console.log('Constructor executed');
- this.init();
- console.groupEnd();
- }
- init() {
- console.group('init');
- console.log('init executed');
- console.groupEnd();
- }
- }
- const myClass = new MyClass();
控制台效果如下:
10、浏览器转为编辑器
在大部分情况下,我们在浏览器中调试DOM结构或者编辑一些文本时,会在Chrome Developer Tools的Elements选项中对DOM节点进行编辑,但是一旦节点过多,会很容易增加调试过程的困难,这里我们可以使用一种方式来将浏览器直接转换为编辑器模式:
- document.body.contentEditable = true;
在控制台中输入以上代码后,可以将浏览器中的所有内容变为可编辑状态,效果图如下:
作者:小维FE
链接:https://juejin.im/post/5ddd373cf265da05d7582ce8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
console调试技巧的更多相关文章
- 推荐几个不错的console调试技巧
在我们的日常前端开发中,使用最频繁的莫过于使用console.log在浏览器的控制台中打印出我们需要调试的信息,但是大部分人可能跟之前的我一样,没有意识到其实console除了log方法以外,还有很多 ...
- 前台console调试技巧
前台console调试技巧 一.console.log() 二.console.warn() 三.console.dir() 四.console.table() 五.console.assert() ...
- console 调试技巧
前言 如果统计一番前端最常用的方法,那么 console.log 一定位列其中.无论你写的是原生 JS 亦或者是 JQuery.Vue等等,调试之时,都离不开 console.log 方法.但是,co ...
- JavaScript调试技巧之console.log()详解
JavaScript调试技巧之console.log()详解 对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻 ...
- 【转】你所不知道的Android Studio调试技巧
这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...
- VS调试技巧,提高调试效率(转):
如果你还没有使用过这些技巧,希望这篇博文能帮你发现它们. 它们学起来很容易,能帮你节省很多时间. 运行到光标(Ctrl+ F10) 我经常看见人们是这样来调试应用程序的: 他们在应用程序需要调试的代码 ...
- iOS各种调试技巧豪华套餐
转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global Break ...
- 你所不知道的Android Studio调试技巧
转载:http://www.jianshu.com/p/011eb88f4e0d Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug ...
- Visual Studio的调试技巧
Visual Studio的调试技巧 [原文地址] Debugging Tips with Visual Studio 2010 [原文发表日期] 2010/8/19 10:48 AM 这是我写的关于 ...
随机推荐
- dpwwn: 1 Vulnhub Walkthrough
主机层面扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.130 22/tcp open ssh OpenSSH 7.4 (protocol 2.0) 80/ ...
- leaflet-webpack 入门开发系列四图层控件样式优化篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 获取Tekla属性方式
XmlTextWriter xmlTextWriter = new XmlTextWriter((TextWriter) stringWriter); xmlTextWriter.Formatting ...
- Python3 中的Number
Python3 支持 int.float.bool.complex(复数). 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. 像大多数语言一样,数 ...
- Pipe——高性能IO(二)
Pipelines - .NET中的新IO API指引(一) Pipelines - .NET中的新IO API指引(二) 关于System.IO.Pipelines的一篇说明 System.IO.P ...
- windows7使用vhd虚拟磁盘
操作系统 : windows7_x64 创建vhd 磁盘管理 --> 操作 --> 创建vhd 挂载vhd 脚本: rem 挂载VHD @echo off (echo select vdi ...
- QLineEdit限制数据类型——只能输入浮点型数
前言 最近做了一个小的上位机,要通过串口来下发几个时间参数,为了防止误输入,产生不必要的麻烦,我把输入范围限制在0-680的浮点型数据,支持小数点后2位.学习了一下QLineEdit类是如何限制输入类 ...
- 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能
最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...
- Java题库——Chapter12 异常处理和文本IO
异常处理 1)What is displayed on the console when running the following program? class Test { public stat ...
- 怎样使用element-starter快速搭建ElementUI项目
场景 为了能快速搭建起一个ElementUI项目,我们可以使用element-starter这个模板进行快速搭建. element-starter的Github https://github.com/ ...