详解js中的console对象

news2024/11/19 2:59:08

对于前端开发而言,console对象大家肯定都很熟悉,最常用的 console.log() 是开发调试必用的

但是对于console对象的其他方法,相对而言使用的就比较少了。下面详细介绍一下:

谷歌浏览器输出console对象:

值得一提的是不同浏览器输出console对象的内容有些许差异,像火狐浏览器中就没有context()和creatTask() 方法,我们这里只介绍通用的。按照分类如下:

1、log、warn、info、error、debug 日志级别

console.log("我是console.log 输出内容");
console.warn("我是console.warn 输出内容");
console.error("我是console.error 输出内容");
console.info("我是console.info 输出内容"); // 谷歌、edge浏览器不支持info方法,火狐浏览器器显示和log一样
console.debug("我是console.debug 输出内容"); // 谷歌和edge浏览器不支持debug方法,火狐浏览器器显示和log一样

Edge: 

Chrome:

 Firefox:

 只有火狐浏览器显示了 console.debug,并且显示了 console.info 前面的图标。

2、console.assert()

 console.assert(expression, message[, ...args]);
  • expression: 必需参数,这是一个要进行断言判断的布尔表达式。如果其计算结果为 true,则断言通过;否则,断言失败。
  • message: 必需参数,当断言失败时要在控制台输出的错误消息字符串。可以使用模板字面量(template literals)或字符串拼接等方式包含动态信息。
  • [...args]: 可选参数,零个或多个附加参数。这些参数将在 message 字符串中按照占位符的位置被替换。类似于 console.log() 中的参数扩展。
console.assert(1 + 1 === 3, "出错啦,1+1应该等于2");

3、console.dir()

用于以结构化、可交互的方式显示给定对象的所有属性和方法。此方法有助于开发者深入理解对象的内部结构及其继承关系。 

const person = {
    name: "Alice",
    age: 30,
    greet() {
        console.log("Hello, " + this.name);
    },
};
console.log(person.greet);
console.dir(person.greet);

 第一个是 console.log() 输出内容,第二个是 console.dir() 输出内容

 4、console.count() 和 console.countReset()

console.count() 是一个用于统计特定标签在控制台中出现次数的方法。每次调用 console.count() 时,如果传入的标签与之前调用过的相同,则对应的计数值会递增;如果标签不同,则会创建一个新的计数项。这种方法对于跟踪代码中特定事件(如用户交互、循环迭代等)的发生次数非常有用。

console.countReset() 是与 console.count() 配合使用的控制台方法,用于重置特定标签的计数器。当需要重新开始计数或者清除某个计数器时,可以调用此方法。

console.count("Button clicked");
console.count("Form submitted");
console.count("Button clicked");
console.countReset("Button clicked");
console.log("已经执行了countReset方法");
console.count("Button clicked");

 

5、console.dirxml() 

console.dirxml() 是一个用于在浏览器控制台中以结构化方式显示 XML 或 HTML 元素及其子节点的方法。它特别适用于查看 DOM 节点的层次结构和属性。

// 获取页面上的一个元素
const myElement = document.getElementById("myDiv");
// 使用 console.dirxml() 输出该元素的结构和属性
console.dirxml(myElement);

6、console.group()、console.groupEnd()、console.groupCollapsed()

console.group() 是一个用于在浏览器控制台中组织日志输出的方法,它允许将一系列相关的日志消息归类到一个可折叠的组内,从而提高日志的可读性和管理性。

console.groupCollapsed() 和 console.group() 的区别就是 console.groupCollapsed()默认是折叠的,可以手动展开。console.group() 默认是展开的,可以手动折叠

// 创建一个名为 "User Login Process" 的日志分组
console.group("User Login Process");
// 在分组内输出相关日志
console.log("Checking user credentials...");
console.warn("Weak password detected!");
console.info("Session token generated.");
// 结束当前日志分组
console.groupEnd();

// 创建一个名为 "User Login Process" 的日志分组
console.groupCollapsed("groupCollapsed");
// 在分组内输出相关日志
console.log("Checking user credentials...");
console.warn("Weak password detected!");
console.info("Session token generated.");
// 结束当前日志分组
console.groupEnd();

 

 7、console.memory() 

console.memory 提供了有关当前网页所占用内存的相关信息。通过访问和打印 console.memory,开发者可以获取到有关页面内存使用情况的概览数据,这对于诊断内存泄漏、优化性能等问题非常有用。

  • usedJSHeapSize: 返回当前页面已使用的 JavaScript 堆大小(以字节为单位)。这包括了 V8 引擎分配给 JavaScript 对象、闭包、字符串、正则表达式等的内存。
  • totalJSHeapSize: 返回当前页面 JavaScript 堆的总大小(以字节为单位),包括已使用部分和尚未分配的部分。
  • jsHeapSizeLimit: 返回当前页面 JavaScript 堆的最大允许大小(以字节为单位)。超过此限制可能会导致 V8 引擎触发垃圾回收或内存压缩。
// 输出当前内存使用情况
console.log(console.memory);
// totalJSHeapSize: 整个 JavaScript 堆的大小(以字节为单位),包括已分配对象和空闲空间。
console.log("Total JS Heap Size:", console.memory.totalJSHeapSize);
// usedJSHeapSize: 已分配给 JavaScript 对象的实际内存(以字节为单位),不包括空闲空间。
console.log("Used JS Heap Size:", console.memory.usedJSHeapSize);
// jsHeapSizeLimit: JavaScript 堆的最大允许大小(以字节为单位)。
console.log("JS Heap Size Limit:", console.memory.jsHeapSizeLimit);

8、console.profile() 和 console.profileEnd()

console.profile() 是一个用于启动 JavaScript CPU 性能分析器的方法。它可以追踪指定时间段内函数调用、事件处理等的执行情况,包括调用次数、耗时、CPU 占用等信息,有助于识别代码中的性能瓶颈。

// 执行需要分析的代码
function heavyComputation() {
    // 启动一个名为 "My Function Performance" 的性能分析 session
    console.profile("My Function Performance");
    for (let i = 0; i < 10000000000; i++) {}

    // 结束性能分析 session
    console.profileEnd();
}
heavyComputation();

9、 console.table()

console.table() 是一个用于在浏览器控制台以表格形式展示数组或对象集合的方法。它将数据结构清晰、直观地呈现出来,便于开发者快速浏览和分析大量数据。

// 示例一:展示数组数组
const products = [
    ["Product A", 10, 20],
    ["Product B", 15, 25],
    ["Product C", 20, 30],
];
console.table(products);

// 示例二:展示对象数组
const users = [
    { name: "Alice", age: 25, role: "Admin" },
    { name: "Bob", age: 30, role: "Editor" },
    { name: "Charlie", age: 35, role: "Viewer" },
];
console.table(users);

// 示例三:指定显示的列
console.table(users, ["name", "role"]);

10、console.time()、console.timeEnd()、console.timeLog()、console.timeStamp()

console.time() 是一个用于测量一段代码执行时间的方法。它可以帮助开发者量化代码块或特定任务的运行时长,用于性能分析和优化。

console.timeEnd() 是与 console.time() 配合使用的另一个方法,用于停止计时器并输出测量的代码执行时间。

console.timeLog() 是一个用于在计时器运行期间输出中间时间点的方法。它与 console.time() 和 console.timeEnd() 结合使用,允许在计时器未结束时记录和输出中间时间点的信息,有助于更细粒度地监控和分析代码执行情况。

console.timeStamp() 是一个用于在浏览器控制台的时间轴(Timeline)面板中插入标记的方法。它可以帮助开发者在时间线上标注特定事件的发生时间,以便于分析和可视化程序执行流程。

console.time("for循环这段代码执行了");
for (let i = 0; i < 100000000; i++) {}
console.timeEnd("for循环这段代码执行了");

// 开始计时器,标记为 "Long Running Task"
console.time("Long Running Task");
// 执行需要计时的任务
for (let i = 0; i < 100; i++) {
    // 在任务的不同阶段记录中间时间点
    if (i === 50) {
        console.timeLog(
            "Long Running Task",
            "Halfway through the task"
        );
    }
    // ... 执行任务相关代码 ...
}
// 结束计时器并输出总执行时间
console.timeEnd("Long Running Task");

// 标记一个名为 "User Interaction" 的时间点
console.timeStamp("User Interaction");
// ... 进行其他操作 ...
// 标记另一个名为 "Async Request Start" 的时间点
console.timeStamp("Async Request Start");
// ... 异步请求处理 ...
// 标记名为 "Async Request End" 的时间点
console.timeStamp("Async Request End");

11、console.trace()

console.trace() 是一个用于在浏览器控制台输出当前执行位置的调用堆栈跟踪信息的方法。可以帮助开发者定位代码执行的具体路径,特别是在处理错误、异常或调试复杂调用关系时非常有用。

function outerFunction() {
    innerFunction();
}
function innerFunction() {
    console.trace(); // 输出堆栈跟踪信息
}
outerFunction();

12、console.clear()

清空控制台

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

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

相关文章

2018-2023年上市公司富时罗素ESG评分数据

2018-2023年上市公司富时罗素ESG评分数据 1、时间&#xff1a;2018-2023年 2、来源&#xff1a;整理自WIND 3、指标&#xff1a;证券代码、简称、ESG评分 4、范围&#xff1a;上市公司 5、指标解释&#xff1a; 富时罗素将公司绿色收入的界定和计算作为公司ESG 评级打分结…

Windows批处理脚本,用于管理Nginx服务器

先看截图&#xff1a; Windows批处理脚本&#xff0c;用于管理Nginx服务器。它提供了启动、重启、关闭Nginx以及刷新控制台等功能。 设置环境变量&#xff1a; set NGINX_PATHD:&#xff1a;设置Nginx所在的盘符为D盘。set NGINX_DIRD:\nginx1912\&#xff1a;设置Nginx所在…

以太网ARP协议解析

一、什么是ARP协议 ARP协议&#xff0c;全称是Address Resolution Protocol&#xff0c;即地址解析协议。 ARP协议的作用&#xff0c;就是在已知目标设备的IP地址但是不知道其MAC地址的时候&#xff0c;根据IP地址&#xff0c;获取到其MAC地址&#xff0c;以便组成完整的IP包进…

profinet协议基础

文章目录 工业以太网自动化通讯金字塔工业以太网技术比较 profinet概述profinet特性 EtherNet通信EtherCAT通信EtherCat特性EtherCat过程同步 工业以太网 工业以太网是基于IEEE 802.3 (Ethernet)的强大的区域和单元网络。 自动化通讯金字塔 各个组织与工业以太网 工业以太网…

2024.4.25

#include <iostream> #include <iomanip> using namespace std; class Person{const string name;int age;char sex; public:Person(const string name):name(name){cout << "第一个Person构造函数" << endl;}Person():name("zhangsan&…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点&#xff1a;判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;起点是root&#xff0c;终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式&#xff0c;从根节点从根到 叶子不断对路径进行加…

javaSE(九):线程

目录 一、程序,进程,线程 1.概念 2.三者之间的关系&#xff1a; 二、创建线程 ①继承Thread类的方式 ②实现Runnable接口的方式 三、Thread类中方法 1.常用方法 2.线程优先级 四、线程状态 ①线程在它的生命周期中会处于不同的状态 ②线程的状态 五、多线程 1.概念…

君正X2100 RTOS 固件升级

使用cloner工具烧写固件需要在上电之前让boot_sel[2:0]处于boot from USB模式&#xff0c;但是电路板装在机壳内部后不方便改变boot_sel[2:0]的状态&#xff0c;如果要升级固件&#xff0c;需要通过机壳留出的USB口、网口、或者无线网络进行固件更新。 一、升级方案 1、固件分…

vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计

Versal 串行 I/O 硬件调试流程 Versal ™ ACAP 无需再生成 IBERT IP &#xff0c; 因为使用系统内串行 I/O 调试所需的必要逻辑现已集成到 GTY 收发器架构内。使 用 GTY 收发器的任何设计均可用于串行 I/O 硬件调试。 Versal 串行 I/O 硬件调试流程具有 2 个不同阶…

10.JAVAEE之网络编程

1.网络编程 通过网络,让两个主机之间能够进行通信 >基于这样的通信来完成一定的功能进行网络编程的时候,需要操作系统给咱们提供一组 AP1, 通过这些 API才能完成编程&#xff08;API 可以认为是 应用层 和 传输层 之间交互的路径&#xff09;&#xff08;API:Socket API相当…

【Qt常用控件】—— QWidget 核心属性

目录 &#xff08;一&#xff09;控件概述 1.1 关于控件体系的发展 &#xff08;二&#xff09;QWidget 核心属性 2.1 核心属性概览 2.2 enabled 2.3 geometry 2.4 windowTitle 2.5 windowIcon 2.6 windowOpacity 2.7 cursor 2.8 font 2.9 toolTip 2.10 focus…

java的ArrayList LinkedList的操作

文章目录 ArrayList1. ArrayList集合的特点2. 操作 LinkedList1. LinkedList集合的特点2. 操作 参考链接 ArrayList 1. ArrayList集合的特点 2. 操作 add(Object element) 向列表的尾部添加指定的元素。size() 返回列表中的元素个数。get(int index) 返回列表中指定位置的元素…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type&#xff1a;忽略类型&#xff0c;也即忽略规则&#xff0c;如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s)&#xff1a;仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型&#xff0c;比如.txt后…

MATLAB循环语句

MATLAB 循环语句 在某些情况下&#xff0c;您需要多次执行一个代码块。通常&#xff0c;语句是按顺序执行的。首先执行函数中的第一条语句&#xff0c;然后执行第二条&#xff0c;依此类推。 编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。 循环语句允许我们…

把 KubeBlocks 跑在 Kata 上,真的可行吗?

背景 容器的安全性一直是广受关注的话题。这个领域也产生了很多不错的开源项目。Kata就是其中之一。 Kata Containers&#xff08;简称 Kata&#xff09;是一种开源项目&#xff0c;它提供了一种安全而高性能的容器运行时环境。Kata Containers 利用虚拟化技术&#xff08;通常…

【深度学习实战(24)】如何实现“断点续训”?

一、什么是断点续训&#xff1a; 中断的地方&#xff0c;继续训练。与加载预训练权重有什么区别呢&#xff1f;区别在于优化器参数和学习率变了。 二、如何实现“断点续训” 我们需要使用checkpoint方法保存&#xff0c;模型权重&#xff0c;优化器权重&#xff0c;训练轮数…

TablePlus for Mac/Win:开启高效数据开发新纪元

在当今数字化时代&#xff0c;数据的重要性日益凸显。无论是企业还是个人&#xff0c;都需要一款强大而实用的本地原生数据开发软件来提升工作效率。而 TablePlus for Mac/Win 正是这样一款卓越的工具&#xff0c;它为用户带来了全新的体验&#xff0c;让数据开发变得更加轻松、…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(三)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 4 - 6节&#xff09; P5《04.快速入门》 本节来实现一个 HelloWorld 效果&#xff1a; 1、打开编辑器&#xff0c;选择新建项目&…

【matlab】reshape函数介绍及应用

【matlab】reshape函数介绍及应用 【先赞后看养成习惯】求点赞关注收藏&#x1f600; 在MATLAB中&#xff0c;reshape函数是一种非常重要的数组操作函数&#xff0c;它可以改变数组的形状而不改变其数据。本文将详细介绍reshape函数的使用方法和应用。 1. reshape函数的基本语…

Redisson分布式锁 --- 源码分析

1.获取一把锁 RLock lock redissonClient.getLock("订单lock"); 2.业务代码加锁 lock.lock(); 2.1 lock.tryAcquire Long ttl tryAcquire(leaseTime, unit, threadId); 2.2 lua脚本: tryLockInnerAsync方法 如果获取锁失败&#xff0c;返回的结果是这个key的剩…