你所不知道的console.log()(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: 1000ms

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

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

最后的最后,该清场了。

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

总结

我是王大锤,万万没想到,console.log的八卦就这样被我说完了,本以为还可以吹水个几万字。

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

  • 34
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
console.log()是一个用于在控制台输出信息的方法。它可以接受一个或多个参数,并将它们连接起来输出。\[2\]例如,console.log('Hello World')会在控制台输出"Hello World",而console.log('a', 'b', 'c')会输出"a b c"。\[2\]这个方法在调试代码时非常有用,可以帮助开发者查看变量的值或输出一些调试信息。\[2\]在引用\[1\]中的例子中,console.log()被用来输出一些比较运算的结果,如1>=3的结果为false,1<=2的结果为true,1=='1'的结果为true,1==='1'的结果为false。\[1\]另外,在引用\[3\]中的例子中,console.log()被用来输出一些算术运算的结果,如1+1的结果为2,typeof (1+1)的结果为"number",typeof 3.14的结果为"number"。\[3\]总之,console.log()是一个常用的调试工具,可以帮助开发者输出信息并检查代码的执行结果。 #### 引用[.reference_title] - *1* *3* [JS基础第一课](https://blog.csdn.net/qq_51478745/article/details/125760865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [console.log详解](https://blog.csdn.net/qq_29007709/article/details/86238095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值