【JavaScript】你不知道的 console.log

console.log,作为一个前端开发者,想必每天都会用它来做分析调试,但这个简单函数背后你所不知道的一面,很多人未必使用过,有一些也是很方便使用的

基础

首先,简单科普这个函数的作用。前端开发者可以在 js 代码的任何部分调用 console.log,然后你就可以在浏览器的开发者控制台里,看到这个函数调用的那一瞬间你指定的变量或表达式的值。

console.log('123')
// 123

console.log('1', '2', '3')
// 1 2 3

console.log('1\n2\n3\n')
// 1
// 2
// 3

我们可以通过上面的方式进行单个变量(表达式)、多个变量以及换行输出。而这对于日常开发的大多数情况算是够用了。
格式化输出

console.log('%d + %d = %d', 1, 1, 2) //或console.log(1,1,2);
// 1 + 1 = 2

写过 C 语言的童鞋肯定对上面这种写法不陌生,这种写法在复杂的输出时,能保证模板和数据分离,结构更加清晰。不过简单的输出就不那么方便了。
console.log 支持的格式标志有:

占位符描述
%s字符串
%d%i整数
%f浮点数
%o/%Oobject对象
%ccss样式

常用我就不说了,说一下,不常用的,

console.log/debug/warn/error,

这些都可以做调试输出,区别是:

样式不同我们可以通过调试器底部筛选出不同的输出项

所以跟网站重构要求 html 语义化类似,当我们的调试输出比较多时,根据实际场景使用不同类型的输出函数能使我们的输出更有条理。

值得一提的是 console.error,我们使用它做输出除了可以输出错误信息外,还可以输出调用这个函数的一瞬间的调用栈!这无疑给我们调试带来很多方便(当然你也可以用 js 断点一步步跟踪),而这是 console.log 所不具备的。除了 console.error,还有一个函数 console.trace 也可以打印出调用一瞬间的调用栈,不过它的输出样式和位置就跟 console.log 一样了:

其实除了打印调试信息外,console 还有不少强大有用但却很低调的接口。

console.time & console.timeEnd

这是性能调试的利器啊,熟悉 NodeJs 的童鞋更是清楚。肯定不少童鞋干过这事:在我们的某块代码前新增一个类似 startTime 的变量,给它一个时间戳,然后在我们执行完代码后,再打一个时间戳,再将两者相减,再将结果输出。现在我们使用上面的函数,就可以省下很多功夫了:

console.time('wait')
setTimeOut(() => {
  console.timeEnd('wait')
}, 1000)
// wait: 1.012s

使用这两个接口是何其方便!而且我们还可以将一个字符串作为函数参数,来区分不同的性能计时。

console.count

这是一个计数器,我们可以传个名字给它,如 a,然后每次调用 console.count(‘a’)(可以在不同函数不同地方),它就能打印出这样一个调用执行了多少次:

let a = () => {
  console.count('Call function a')
}
let b = () => {
  a()
}
let c = () => {
  b()
}
b()
c()
// Call function a:1
// Call function b:2

这个函数特别适用于在一些复杂的场景,有时一个函数被多个地方调用到,而我们想知道该函数是否少调用或重复调用,此时使用计数器比 js 断点自己还要默记调了几次快多了。

console.assert

assert,搞编程的应该对这个单词不陌生:断言。使用 console.assert,你可以理解为于禁的技能(三国杀玩多了这孩子),你猜错了这个表达式的真假,那我就可以打出我的信息:

let a = () => {
  let el = document.getElementById('test')
  console.assert(el, '没有ID为test的节点')
}
a()
// Assertion failed: 没有ID为test的节点

不消说,使用该函数可以让我们在某些地方只在符合某个条件才进行调试输出,使输出更加干净。当然你也可以用 if 语句,不过写起来就麻烦了一些。

console.group

一看就知道是分组输出:

console.group('group1')
console.log('a')
console.log('b')
console.groupEnd('group1')
console.group('group2')
console.log('a2')
console.log('b2')
console.groupEnd('group2')

显然这个函数特别适合有一大堆调试输出的情况,做大项目估计会用上。不过有时你打开控制台看到满屏满屏的输出你也会很头痛的,于是你可以分组输出且默认收起:

console.clear

最后的最后,该清场了。

特别适用于,在一个多人开发项目,你不爽别人的调试输出,那你可以用这个函数统统清掉,再输出自己的调试信息,不用跟这个函数客气。

总结

conssole.timestamp & console.profile这两个函数对应 chrome 调试面板的两个 tab,调试性能时可用上,有兴趣的童鞋可以看看:Google 开发者文档之 console

posted @ 2021-05-11 17:10  [ABing]  阅读(160)  评论(0编辑  收藏  举报