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

基础

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

console.log('123');
// 123console.log('1', '2', '3');
// 1 2 3console.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/%O object对象
%c css样式

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

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

你所不知道的console.log()(console.log详解)相关推荐

  1. 你所不知道的粘接强度检测知识大全详解

    评价粘接质量最常用的方法就是测定粘接强度.表征胶粘剂性能往往都要给出强度数据,粘接强度是胶粘技术当中一项重要指标,对于选用胶粘剂.研制新胶种.进行接头设计.改进粘接工艺.正确应用胶粘结构很有指导意义. ...

  2. 你所不知道的setTimeout

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...

  3. 你所不知道的运算符- 单目运算符

    运算符 运算符分为: 算数运算符, 关系运算符 , 逻辑运算符.这些都是知道的吧,小编要说的是你所不知道的运算符.单目运算符.双目运算符.以及三目运算符 单目运算符 单目运算符是指只接受一个操作数的操 ...

  4. 你所不知道的HTML5——语音合成

    你所不知道的HTML5--语音合成 前端能力的增强很大程度上依赖于 HTML5 的新 API,从这篇文章开始我也会对平时做不常用的一些 API 做一下学习总结 今天的文章就从语音合成开始 为什么想到这 ...

  5. 一些你所不知道的VS Code插件

    摘要: 你所不知道的系列. 原文:提高 JavaScript 开发效率的高级 VSCode 扩展之二! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 作为一名业余爱好者.专业人员,甚 ...

  6. Android Context完全解析,你所不知道的Context的各种细节

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/47028975 前几篇文章,我也是费劲心思写了一个ListView系列的三部曲,虽然 ...

  7. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

    https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...

  8. 那些你所不知道的arXiv使用技巧

    作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧

  9. ai的弹窗点了都不响应_【评价集合】拼多多评价,你所不知道的点都在这里!...

    对于在拼多多开店的商家们来说,评价是消费者对于商品的好坏程度的一个评分,评价的高低不仅仅会影响到商品的销量,更会影响转化率以及权重!所以为了店铺商品的长远发展打算!各位商家在求取出评.好评的道路上不断 ...

最新文章

  1. NLP情感分析 动手学深度学习博客
  2. crt中 新建的连接存储在哪_连接昌邑路和浦东大道,这条新建道路的规划设计方案公示中...
  3. redis安装(windows)
  4. 查找算法(C实现)(待补充)
  5. QGroupBox详解
  6. ES6高级技巧(五)
  7. 海思加鸿蒙的零距离思考,自主生态之路在何方
  8. 基础:新建个maven项目
  9. window10 下面固定本地 ip
  10. python海龟库命令_turtle库常用命令
  11. 关于XDR的这些问题你都了解吗?
  12. 做一个网站真的有那么难吗?
  13. Nacos配置热更新两种方式。
  14. View被遮挡的解决办法
  15. 牛客动态规划习题:Min酱要旅行(背包变种)
  16. 中英文标点符号的读法用法大全
  17. C++后端开发面试题精选
  18. AI测试】人工智能测试整体介绍——第五部分
  19. Centos GNOME桌面
  20. 斐讯N1 docker安装opernwrt,当做旁路由

热门文章

  1. 【Python爆款】这款“成语接龙”太强大了?以后就靠它了、霸气。
  2. Nginx做流媒体服务Windows版实现直播
  3. 刘强东给京东高管降薪:2千多位总监兄弟工资打8折!并拿出100亿保障”兄弟“基础住房...
  4. linux修改磁盘标签,Ubuntu挂载硬盘,修改卷标
  5. Java实现视频分类 【内链】
  6. 独立设置mac的鼠标和触控板滚动方向
  7. STM32F103学习笔记(4)——LCD段码屏HT1621使用
  8. 人机融合智能中的计算-算计问题
  9. linux用内存做硬盘缓存吗,Centos 7利用内存优化磁盘缓存读写速度
  10. 1stopt使用教程之公式拟合