利用console提高写bug的效率

news2025/2/27 4:44:29

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

地址:前端面试题库

自从入坑前端后,日常写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.coloradmin.cn/o/896596.html

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

相关文章

msvcp140dll下载方法,msvcp140dll丢失的修复教程

msvcp140.dll是Microsoft Visual C Redistributable组件中的一个动态链接库文件。它是Microsoft Visual C 2015版本和更高版本所需的一个重要文件。这个文件主要用于支持C编译的应用程序,以提供与C相关的函数和功能。 为了解决msvcp140.dll文件丢失或损坏的问题&am…

[Go版]算法通关村第十二关黄金——字符串冲刺题

目录 题目:最长公共前缀解法1:纵向对比-循环内套循环写法复杂度:时间复杂度 O ( n ∗ m ) O(n*m) O(n∗m)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 解法2:横向对比-两两对比(类似合并K个数组、合并K个链表)复…

antd5源码调试环境搭建(window系统)

将antd源码克隆至本地 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提安装python3、安装node版本18版本 不然后续安装依赖会报python3相关的错误。 项目需要使用git 初始化 不然会报husky相关的错误 git init重新安…

元宇宙电商—NFG系统:区块链技术助力商品确权。

在国内,以“数字藏品”之名崛起以来,其与NFT的对比就从未停歇。从上链模式到数据主权,从炒作需求到实际应用,从售卖形式到价值属性,在各种抽丝剥茧般的比较中,围绕两者孰优孰劣的讨论不绝于耳。 NFT的每一…

git 恢复丢失的代码

1.进入代码目录,打开git Bash,执行命令:git reflog,可以查看到提交记录编号;可以看git库查看记录,看丢失的是那次提交的代码; 2.执行命令:git cherry-pick ID ID就是记录编号; 3…

车载APP软件外包开发通讯

车载APP与车辆之间的通信方式和特点会因为不同的技术和场景而有所不同。以下是一些常见的车载APP与车辆通信方式以及它们的特点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.蓝牙连接&#xff1a…

GuLi商城-前端基础Vue-生命周期和钩子函数

下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它 的参考价值会越来越高。 VUE 的生命周期指的是组件在创建、运行和销毁过程中所经历的一系列事件,通过这些事件可以 让开发者在不同阶段进行相应的…

仿牛客论坛项目day4|开发社区登录模块

1、发送邮件 使用spring-boot-starter-mail这个包 2、开发注册功能 (1)访问注册页面 功能拆解: 点击顶部的注册按钮,打开注册页面 新增文件:controller->login 具体实现过程: 增加一个getregist…

图片文字识别-管理敏感词

目录 什么是OCR Tess4j案例 图片文字识别-管理敏感词 什么是OCR OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其…

win10新镜像和Navicat连接orcle数据库nodejs安装,xshell

原版软件 (itellyou.cn) 使用navicat远程连接oracle数据库_True To The Core的博客-CSDN博客 Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决_泥巴城的博客-CSDN博客 下载最新orcle客户端就可以正常连接了 nodejs安装和环境配置-Windows_nodejs…

C++ Builder 关于TRichEdit的字符颜色标记处理

//积累经验每一天,以后忘记好搜索 void __fastcall TForm2::btn3Click(TObject *Sender) { //初始化验证 mmo->SelStart0; mmo->SelLengthmmo->Text.Length(); mmo->SelAttributes->ColorclBlack; String CGhEd…

数字孪生助力智慧水务:科技创新赋能水资源保护

智慧水务中,数字孪生有着深远的作用,正引领着水资源管理和环境保护的创新变革。随着城市化和工业化的不断推进,水资源的可持续利用和管理愈发显得重要,而数字孪生技术为解决这一挑战提供了独特的解决方案。 数字孪生技术&#xf…

教育行业软文怎么写,媒介盒子无偿分享

随着产业升级和技术变革、信息的智能化、数字化发展,也为教育行业带来了新的增长点,在线教育课程类型丰富多元,新课程不断涌现。在激烈的市场竞争环境下,教育机构如何根据市场实行差异化战略并加强自身品牌建成为挑战。 如今&…

牛客小白月赛70E题题解

文章目录 [ 小d的博弈](https://ac.nowcoder.com/acm/contest/53366/E)问题建模问题分析1.分析操作代码 小d的博弈 问题建模 给定一个n*m的矩形,有两个玩家,每次轮流选择某行或某列,然后以该行或该列将矩形分成两个,且取面积较小…

Spring Boot实践八--用户管理系统

1,技术介绍 技术选型功能说明springboot是一种基于 Spring 框架的快速开发应用程序的框架,它的主要作用是简化 Spring 应用程序的配置和开发,同时提供一系列开箱即用的功能和组件,如内置服务器、数据访问、安全、监控等&#xff…

一次性讲清OAuth2.0授权

文章目录 什么是OAuth2.0授权OAuth2.0工作原理OAuth2.0应用示例OAuth2.0授权模式授权码模式简化模式设备码模式 如何申请应用及密钥等信息 什么是OAuth2.0授权 OAuth2.0是一种用于授权的开放标准,它允许用户授权第三方应用访问其在另一个应用中存储的信息&#xff…

网络每日一练

吴泽彬 C Ip 网络层 Tcp udp 传输层, Http 应用层 收起 1 回复 发布于 2019-10-11 12:07 举报 fighting2016 Java A类地址中的私有地址和保留地址: ①10.0.0.0到10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被…

ASEMI探索整流桥GBU814的独特优势和应用领域

编辑-Z 整流桥GBU814在众多电子元件中独树一帜,可在多种设备中发挥其重要作用。作为一款集高效性能和可靠稳定性于一身的整流桥,GBU814已在全球范围内赢得了广泛的好评。在这篇文章中,我们将详细介绍GBU814整流桥的优势和应用领域。 让我们首…

对比 VPN 与远程桌面软件,为什么远程桌面更优越

数字格局不断演变,我们的工作和连接方式也在不断变化。企业纷纷转向远程运营,有关推进向远程过渡的最佳技术的争论从未停止。争论的焦点通常是虚拟专用网络(VPN)和远程桌面软件。 长期以来,VPN 一直被用作访问公司网络…

pytorch 实现VGG

VGG全称是Visual Geometry Group,因为是由Oxford的Visual Geometry Group提出的。AlexNet问世之后,很多学者通过改进AlexNet的网络结构来提高自己的准确率,主要有两个方向:小卷积核和多尺度。而VGG的作者们则选择了另外一个方向&a…