利用console提高写bug的效率

前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

自从入坑前端后,日常写bug就没离开过console。

要说用得多,不如说是console.log用得多,console.warn和console.error配合使用下,几乎就是我的使用日常了。

开发调试场景各式各样,小问题很容易hold得住,问题一复杂,这打印出来的是啥玩意?眼花脑糊。

为了提高写bug效率(不是),我去了解了console的各种玩法。

丰富的文本打印姿势

使用字符串替换

有点C语言的printf那味,对字符串进行格式化输出。

替代字符串说明
%o or %O替换成JavaScript对象
%s替换成字符串
%d or %i替换成整数,支持数字格式化,例如console.log("Foo %.2d", 1.1),会输出Foo 01
%f替换成浮点数,支持数字格式化,例如console.log("Foo %.2d", 1.1),会输出Foo 1.10
const person = {name: 'Amy',age: 18, contact: {phone: 123456789,email: 'amy@gmail.com'}
}

如果是打印字符串,用模板字符串也能有类似的效果。

image.png

如果是打印字符串+对象,可以通过传多个参数打印,或者使用字符串替换,写法更清晰舒适些。

image.png

定义内容样式

%c表示为该指令后的文本使用特定的CSS样式。

image.png

 

image.png

借助这个能力,我们可以在控制台中打印出这样的版本号:

image.png

function printVersion(name, version) {console.log(`%c${name}%cv${version}`,'color: white;padding: 4px 6px;border-radius: 4px 0 0 4px;background-color: #515151','color: white;padding: 4px 6px;border-radius: 0 4px 4px 0;background-color: #0575b7');
}

字符串中有两个%c,值得注意的是,第二个%c无法继承第一个%c的样式,比如其中的color: white;padding: 4px 6px,可见%c作用的文本样式都是独立的。

%c支持background属性,也就意味着background-image可以作用起来打印图片了,有兴趣的可以玩一玩看。(这个我没有测试成功,甚至直接copy了别人打印成功的代码,就奇怪。先pass了,后面研究下)

只会用console.log吗?

console提供了5种打印信息的方法,最常用的当属console.log,其次是console.warn和console.error,最后是console.info和console.debug。

console.warn、console.error

跟其他方法相比,console.warn和console.error能很明显表达出对应的日志级别,主要体现在:

  1. 在控制台中显示效果差异较大。
  2. 抛出堆栈信息。
  3. 源码中高亮提示。

image.png

image.png

这对于问题提示和定位均有较大的帮助,在别人阅读到自己代码的时候,也能推测出这个位置可能是处理错误场景。

console.log、console.info、console.debug的区别

很多人都搞不清楚这三个方法的区别在哪里,在控制台打印出来效果几乎没差,或者说其他功能我们不怎么需要?看下文档说明:

console.log: 向控制台打印消息。

console.info: 向控制台打印消息,仅在Firefox中,输出日志旁边会有一个小的"i"图标。

image.png

console.debug: 向控制台打印“调试”级别的消息,浏览器默认情况下不会显示该消息,需要调整控制台日志级别的过滤选项,使其支持Debug或Verbose后才会显示。

image.png

大部分时候我们只是想打印消息而已,就挑个最短的console.log来用了。

提高debug效率的小技巧

这是一个🌰

const isStudent = true;
const onLine = false;
const person = {name: 'Amy',age: 18, contact: {phone: 123456789,email: 'amy@gmail.com'},followers: [{ name: 'Anna', email: 'anna@gmail.com' },{ name: 'Bob', email: 'bob@gmail.com' },{ name: 'Robin', email: 'robin@gmail.com' },{ name: 'Arthur', email: 'arthur@gmail.com' }]
}

1. 打印变量值

在控制台打印多个变量,尤其是同类型的变量,我们需要进行标识,比如:

image.png

应该很多人都会这么操作,我曾经还出现过标识错误的大乌龙,可以这么写:

image.png

输出内容是一样的,更便捷准确。

2. 快速查看对象

在控制台查看数组or对象,经常是收起来的,内容比较多会被直接省略:

image.png

改成表格输出,可读性一下子就上来了,相当舒适。

image.png

再者,我们往往仅关心某个数据/字段,你还可以指定要查看哪些列(字段),针对性处理。

image.png

3. 分组打印

在调试函数,尤其是定位执行过程时:

function b() {console.log('This is b');console.log('Test');
}
function a() {console.log('This is a');console.log('Test1');b();console.log('Test2');
}
a();

image.png

即使做了标识,一时间还是很难辨别Test2是哪个方法打印出来的。

这种时候,推荐使用console.group()/console.groupCollapsed()进行分组打印,console.groupEnd()则用来闭合分组。

function b() {console.group('This is b');console.log('Test');console.groupEnd();
}
function a() {console.group('This is a');console.log('Test1');b();console.log('Test2');console.groupEnd();
}
a();

image.png

分组打印支持嵌套,这种打印效果直观不少,面对复杂逻辑时,这种方式性价比更高。

4. 统计执行次数

console.count()对输出的内容进行次数统计,可以用于调试方法是否被多次调用,比如React v18: Why useEffect Suddenly Got Crazy?就有现成的例子,统计useEffect回调被调用的次数:

image.png

console.countReset()可进行重置。

5. 统计执行时间

统计方法执行耗时也是可能遇到的调试手段,console也提供了快速的计时通道:

image.png

console.time()启动计时,可以为该计时提供名称,否则使用default。

在计时期间,可以通过console.timeLog()实时查看。

完成计时后,使用console.timeEnd()结束计时。

结尾

以上简单整理了开发过程中可能会遇到的console用法,还有好些方法未提及,比如console.dir()、console.dirxml()等,有兴趣的可以去MDN上了解下。

前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

文章目录 React:构建用户界面的首选Vue:简单优雅的前端框架Angular:Google支持的全面框架Node.js:服务器端的JavaScript运行环境比较不同框架的优势与劣势React:Vue:Angular:Node.js&#xff1a…

怎么查看小程序中的会员信息

商家通过查看会员信息,可以更好地了解用户,并为他们提供更个性化的服务和推荐。接下来,就将介绍如何查看会员信息。 商家在管理员后台->会员管理处,可以查看到会员列表。支持搜索会员的卡号、手机号和等级。还支持批量删除会员…

【Python】数据分析工具之各种图

1 漏斗图 漏斗图描述状态阶段的顺序递进关系,属于序列类图表 import plotly.express as pxdata dict(number[39, 27.4, 20.6, 11, 2],stage["Website visit", "Downloads", "Potential customers", "Requested price", &…

K8s+Docker+KubeSphere+DevOps笔记

K8sDockerKubeSphereDevOps 前言一、阿里云服务器开通二、docker基本概念1.一次构建、到处运行2、docker基础命令操作3、docker进阶操作1.部署redis中间件2.打包docker镜像 三、kubernetes 大规模容器编排系统1、基础概念:1、服务发现和负载均衡2、存储编排3、自动部…

QTreeWidget——信号处理

文章目录 基本属性信号一、信号种类二、信号测试1、currentItemChanged、itemCollapsed、itemExpanded三个信号的测试2、itemActivated信号3、 itemChanged信号4、其余信号的测试代码(包含以上代码) 基本属性 信号 一、信号种类 //当前项发生变化时触…

uniapp 顶部头部样式

<u-navbartitle"商城":safeAreaInsetTop"true"><view slot"left"><image src"/static/logo.png" mode"" class"u-w-50 u-h-50"></image></view></u-navbar>

使用Pandas处理Excel文件

Excel工作表是非常本能和用户友好的&#xff0c;这使得它们非常适合操作大型数据集&#xff0c;即使是技术人员也不例外。如果您正在寻找学习使用Python在Excel文件中操作和自动化内容的地方&#xff0c;请不要再找了。你来对地方了。 在本文中&#xff0c;您将学习如何使用Pan…

怎样做好日志分析?

首先我们要知道日志分析是指检查并理解计算机生成的日志消息&#xff0c;例如日志事件或审计来跟踪记录&#xff0c;通过日志分析可以帮助您诊断和解决计算机系统中的问题&#xff0c;以及监视系统性能和安全性。 如果您想知道您的网络中发生了什么&#xff0c;以便洞察潜在的…

【JUC】线程池ThreadPoolTaskExecutor与面试题解读

1、ThreadPoolTaskExecutor 创建线程池 从它的创建和使用说起&#xff0c;创建和使用的代码如下&#xff1a; 创建&#xff1a; ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize…

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…

Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?

容器创建时会调用AbstractApplicationContext的refresh方法&#xff0c;其中会调用invokeBeanFactoryPostProcessor方法&#xff0c;如下图 invokeBeanFactoryPostProcessors代码如下&#xff1a; 其中调用的PostProcessorRegistrationDelegate的invokeBeanFactoryPostProcess…

计算机竞赛 交通目标检测-行人车辆检测流量计数 - 计算机竞赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

【Flutter】Flutter 使用 font_awesome_flutter 展示图标

【Flutter】Flutter 使用 font_awesome_flutter 展示图标 文章目录 一、前言二、安装和基本使用1. 安装2. 基本使用示例3. 图标的命名和样式 三、自定义图标和高级功能1.动态检索图标2.排除样式和优化 四、完整示例五、总结 一、前言 在现代移动应用开发中&#xff0c;图标起着…

C语言入门 Day_8数据与运算小结

目录 前言 1.精度 2.运算 2.易错点 3.思维导图 前言 到目前为止我们一共学习了四种数据类型&#xff0c;他们分别是表示整数的整型&#xff1b;表示小数的浮点型&#xff1b;表示字符的字符型&#xff1b;和表示布尔数的布尔型。 表示整数的整型&#xff0c;它的变量类型名…

浅谈泛在电力物联网在电力设备状态在线监测中的应用

安科瑞 华楠 摘要&#xff1a;随着信息化水平的不断发展&#xff0c;泛在电力物联网的建设提上日程&#xff0c;这对提升变电站电力设备在线监测水平&#xff0c;推动智能电网发展具有重要的指导意义。对基于物联网的电力设备状态监测系统进行了研究&#xff0c;概括了泛在电力…

Android TV开发之VerticalGridView

Android TV应用开发和手机应用开发是一样的&#xff0c;只是多了焦点控制&#xff0c;即选中变色。 androidx.leanback.widget.VerticalGridView 继承 BaseGridView &#xff0c; BaseGridView 继承 RecyclerView 。 所以 VerticalGridView 就是 RecyclerView &#xff0c;使…

Redis高可用:哨兵机制(Redis Sentinel)详解

目录 1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09; 2.哨兵机制基本流程 3.哨兵获取主从服务器信息 4.多个哨兵进行通信 5.主观下线和客观下线 6.哨兵集群的选举 7.新主库的选出 8.故障的转移 9.基于pub/sub机制的客户端事件通知 1.什么是哨兵机制&#xf…

重生之我要学C++第六天(const,static,友元)

这篇文章的主要内容是const以及权限问题、static关键字、友元函数和友元类&#xff0c;希望对大家有所帮助&#xff0c;点赞收藏评论支持一下吧&#xff01; 更多优质内容跳转&#xff1a; 专栏&#xff1a;重生之C启程(文章平均质量分93) 目录 const以及权限问题 1.const修饰…

【计算机网络】【常考问题总结】

1. ping 127.0.0.1 后会发生什么&#xff1f; ping 127.0.0.1 &#xff1b;ping 0.0.0.0 &#xff1b; ping localhost 面试官问&#xff1a;断网了&#xff0c;还能ping通 127.0.0.1 吗&#xff1f;为什么&#xff1f;_kevin_tech的博客-CSDN博客 2. MTU&#xff0c;MMU是…

新书上市----Pytest企业级应用实战 新书上市

【原文链接】新书上市----Pytest企业级应用实战 新书上市 《Pytest企业级应用实战》 京东购书链接 当当购书链接 天猫购书链接 作者简介 本书作者本硕毕业于哈尔滨工业大学&#xff0c;曾先后就职于中兴通讯和华为&#xff0c;现任职于中科南京软件技术研究院&#xff0c;…