利用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上了解下。

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

地址:前端面试题库

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本基础

目录 前言 一、概述 (一)、shell脚本基础概念 (二)、shell的类型 二、Shell变量 (一)、组成 1.变量名 2.变量值 (二)、类型 1.系统内置变量(环境变量) 2.自定…

Spring-3-Spring AOP概念全面解析

今日目标 能够理解AOP的作用 能够完成AOP的入门案例 能够理解AOP的工作流程 能够说出AOP的五种通知类型 一、AOP 1 AOP简介 思考:什么是AOP,AOP的作用是什么? 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Programming)面向切面编程,一…

c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

单片机一般采用中断方式接受数据,这样便于及时处理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…

接口测试及接口抓包常用测试工具和方法?

作为测试领域中不可或缺的一环,接口测试和抓包技术在软件开发过程中扮演着至关重要的角色。不论你是新手还是有一些经验的小伙伴,本篇文章都会为你详细介绍接口测试的基本概念、常用测试工具和实际操作技巧,让你轻松掌握这一技能。 接口测试…

MySQL之索引和事务

什么是索引索引怎么用索引的原理事务使用事务事务特性MySQL隔离级别 什么是索引 索引包含数据表所有记录的引用指针;你可以对某一列或者多列创建索引和指定不同的类型(唯一索引、主键索引、普通索引等不同类型;他们底层实现也是不同的&#…

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

1. ApplicationRunner接口 用法: 类型: 接口 方法: 只定义了一个run方法 使用场景: springBoot项目启动时,若想在启动之后直接执行某一段代码,就可以用 ApplicationRunner这个接口,并实现接口…

线程池中的常见面试题

目录 1. 线程池相比于线程有什么优点 2. 线程池的参数有哪些 3. 线程工厂有什么用 4. 说一下线程的优先级 5. 说一下线程池的执行流程 6. 线程池的拒绝策略有哪些 7. 如何实现自定义拒绝策略 8. 如何判断线程池中的任务是否执行完成 1. 线程池相比于线程有什么优点 有…

Rancher管理K8S

1 介绍 Rancher是一个开源的企业级多集群Kubernetes管理平台,实现了Kubernetes集群在混合云本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。Rancher 1.0版本在2016年就已发布,时至今日,Ranche…

【宝藏应用】AI绘图网站

序言 这是一个通过AI模型进行绘制图片的网站。 有图有真相 这些是我在上面找的AI生成的图片,感觉怎么样呢?是不是看起来接近真人的精修图片了? 地址 链接: LiblibAI

sql中union all、union、intersect、minus的区别图解,测试

相关文章 sql 的 join、left join、full join的区别图解总结,测试,注意事项 1.结论示意图 对于intersect、minus,oracle支持,mysql不支持,可以变通(in或exists)实现 2.创建表和数据 -- 建表…

GPT垂直领域相关模型 现有的开源领域大模型

对于ToC端来说,广大群众的口味已经被ChatGPT给养叼了,市场基本上被ChatGPT吃的干干净净。虽然国内大厂在紧追不舍,但目前绝大多数都还在实行内测机制,大概率是不会广泛开放的(毕竟,各大厂还是主盯ToB、ToG市…

FPGA芯片IO口上下拉电阻的使用

FPGA芯片IO口上下拉电阻的使用 为什么要设置上下拉电阻一、如何设置下拉电阻二、如何设置上拉电阻为什么要设置上下拉电阻 这里以高云FPGA的GW1N-UV2QN48C6/I5来举例,这个芯片的上电默认初始化阶段,引脚是弱上来模式,且模式固定不能通过软件的配置来改变。如下图所示: 上…

Git 删除 GitHub仓库的文件

新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端&#xff0c;并执行git init初始化仓库 git clone <你的地址> 找到github上要删除的仓库地址&#xff0c;并复制&#xff0c;在终端里输入git clone <你的地址> 要删除文件的库里右键git b…

对象存储服务-MinIO基本集成

是什么 MinIO 是一个高性能的分布式对象存储服务&#xff0c;适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象文件最大可以达到5TB。 安装启动 mkdir -p /usr/local/minio cd /usr/local/minio# 下载安装包 wget https:/…

从0到1:通用后台管理系统 echarts图使用及其参数

这一章主要讲在系统概览模块中&#xff0c;所使用的echarts图及其参数 echarts是一个基于 JavaScript 的开源可视化图表库&#xff0c; 官网直通车 是在各种后台管理系统的开发中都常见的一种库&#xff0c;也是前端开发管理系统所必学的一种库 那么在项目中主要是使用了饼…

Unity实现异步加载场景

一&#xff1a;创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel,取名为LoadScreen,再在loadScreen下面创建一个Image组件&#xff0c;放置背景图片&#xff0c;然后我们再在lpadScreen下面继续创建一个Slider,这个是用来加载进度条的&#xff0c;我们改名为LoadSlid…

Elasticsearch的一些基本概念

文章目录 基本概念&#xff1a;文档和索引JSON文档元数据索引REST API 节点和集群节点Master eligible节点和Master节点Data Node 和 Coordinating Node其它节点 分片(Primary Shard & Replica Shard)分片的设定操作命令 基本概念&#xff1a;文档和索引 Elasticsearch是面…

顺序表(数据结构)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 顺序表目录 1.线性表 2.顺序表 概念及结构 静态顺序表&#xff1a;使用定长数组存储元素。 动态顺序表&#xff1a;使用动态开辟的数组存储。 接口实现 1.线性表 线性表 &#xff08; linear list &#xff09; 是…

idea如何建立web项目???

我们需要用到tomcat&#xff0c;没有下在着小伙伴&#xff0c;可以借鉴这篇博客&#xff1a; 如何正确下载tomcat&#xff1f;&#xff1f;&#xff1f;_明天更新的博客-CSDN博客 1.建立普通的Java项目。 2.简单编写index.jsp文件 3.添加tomcat 4.运行服务器 5.构建Servlet 最后…

突破瓶颈,提升学习效率的考试培训系统

在现代社会中&#xff0c;教育和培训已经成为人们提升自我能力的重要途径。尤其在考试备考过程中&#xff0c;学习效率的提升显得尤为重要。为了帮助学习者突破学习瓶颈&#xff0c;提高学习效果&#xff0c;我们开发了一款全新的考试培训系统。 我们的系统为学习者提供了全方…