看完这篇文章,你会更加得心应手地使用🦊console🦊

在前端开发中,console 和 debugger 可谓前端调试的两大常用的调试利器和技巧。它们可以帮助开发人员快速定位问题、查看变量值、追踪代码执行流程等,从而提高开发效率。如果你仅仅还是只停留在只会简单的console.log/error(obj),那我建议你可以看完这篇文章,保证对你大有裨益。同时,也建议在看完之后的过程中,多实践多练习,这样才会得心应手。

在前端开发中,console 是一个非常常用的调试工具,可以帮助开发人员输出信息、查看变量值、追踪代码执行流程等。通过灵活使用 console,开发人员可以更快速地定位和解决问题。在本文中,我们将介绍一些 console 的调试技巧,帮助您提高前端调试效率。

请注意,console 调试技巧可以适用于各种前端项目,无论是纯粹的 JavaScript 应用、基于框架的应用,还是使用了其他库和工具的项目。通过掌握这些技巧,您可以更加灵活地利用 console 进行调试,提高开发效率。

概述

首先我们在控制台打出console,看浏览器中console对象包含的所有方法。

这里有一些方法不是经常使用,本篇文章我也主要介绍一些比较常用的console技巧,主要有:

基础打印

  • console.log():用于输出一般信息到控制台。
  • console.warn():用于输出警告信息到控制台。
  • console.error():用于输出错误信息到控制台。
  • console.info():用于输出一般信息到控制台。

计算时间

  • console.time(label):开始一个计时器,参数 label 用于标识计时器。
  • console.timeEnd(label):结束指定标识的计时器,并输出执行时间。
  • console.timeLog(label):输出指定标识的计时器当前的执行时间,不会停止计时器。

计数

  • console.count(label):输出指定标识的调用次数,可以用于统计某个函数被调用的次数。
  • console.countReset(label):重置指定标识的调用次数计数器。

其他

  • console.trace():输出当前的调用栈,可以帮助定位函数调用的来源。
  • console.table(data):以表格形式输出数据,方便查看复杂数据结构。
  • console.clear():清空控制台的输出。
  • console.assert(expression, message):如果 expressionfalse,则输出 message 到控制台。

通过灵活使用这些 console 技巧,开发人员可以更加高效地进行调试工作,快速定位和解决问题。

在结尾会介绍两个浏览器的奇技淫巧,敬请期待。

话不多说,我们开干。

基础打印

  • console.log():用于输出一般信息到控制台。
  • console.warn():用于输出警告信息到控制台。
  • console.error():用于输出错误信息到控制台。
  • console.info():用于输出一般信息到控制台。

本文不描述console使用样式格式的写法。

console.log()

console.log()是最基本、最常用的方法之一。它可以在JavaScript代码的任何位置使用,将信息打印到浏览器的控制台中。

以下是console.log()的基本用法:

javascript 复制代码
let name = "CUGGZ";
let age = 18;
console.log(name)                    // CUGGZ
console.log(`my name is: ${name}`)   // CUGGZ
console.log(name, age)               // CUGGZ 18
console.log("message:", name, age)   // message: CUGGZ 18

上面是比较基础的使用,这里我们也分享一些常用的使用技巧:

  1. 对象解构:可以使用模板字符串来输出变量值和固定内容,更加直观。例如:
javascript 复制代码
const name = 'zs';
console.log({ name }); // { name: zs }

这样我们就不用为了区分,而这样写:

javascript 复制代码
const name = 'zs';
console.log('name:', name);
  1. 模板字符串:可以使用模板字符串来输出变量值和固定内容,更加直观。例如:
javascript 复制代码
console.log(`Name: ${name}, Age: ${age}`); // 使用模板字符串输出
  1. 条件输出:可以根据条件输出不同的信息。例如:
javascript 复制代码
let isAdmin = true;
console.log(isAdmin ? 'Admin user' : 'Regular user'); // 根据条件输出不同信息
  1. 格式化输出 :可以使用格式化字符串来输出信息,如 %s 表示字符串,%d 表示数字等。例如:
javascript 复制代码
console.log('Name: %s, Age: %d', name, age); // 格式化输出
  1. 对象输出:可以输出对象的属性和值。例如:
javascript 复制代码
let person = { name: 'Alice', age: 25 };
console.log(person); // 输出对象

上述方法都适用于 console.log()、console.warn()、console.error() 和 console.info() 这些控制台输出方法。您可以在这些方法中使用对象解构、模板字符串、条件输出、格式化输出和对象输出等技巧来更好地展示信息。因此下面介绍时,不会再多做赘述。

console.warn()

console.warn() 方法用于在控制台输出警告信息。它的用法和console.log一样,只是显示的样式不同,会在信息前面加上一个黄色三角,表示警告

下面是一个示例,展示如何使用 console.warn() 方法输出带有警告图标的信息:

javascript 复制代码
console.warn('This is a warning message');

当您在控制台中运行上述代码时,会看到输出的信息前面有一个黄色的三角形图标,以及您传入的警告信息。

console.error()

console.error() 方法用于在控制台输出错误信息。与 console.log()console.warn() 类似,console.error() 也是用于在控制台中显示信息,但它会以红色文本显示,并在输出信息前面显示一个红色的叉号图标,以表示这是一条错误信息。

以下是一个示例,展示如何使用 console.error() 方法输出带有错误图标的信息:

javascript 复制代码
console.error('This is an error message');

当您在控制台中运行上述代码时,会看到输出的信息前面有一个红色的叉号图标,以及您传入的错误信息。

当然,console.error()还有一个console.log()不具备的功能,那就是打印函数的调用栈

函数的调用栈是指当前执行的函数以及它被调用的函数的层次关系。通过打印函数的调用栈,您可以追踪代码执行的路径,从而更容易地找到错误所在的位置。

下面是一个示例,展示如何使用 console.error() 方法输出错误信息以及函数的调用栈:

javascript 复制代码
function func1() {
    func2();
}

function func2() {
    console.error('An error occurred');
}

func1();

当您在控制台中运行上述代码时,会看到输出的错误信息后面会有函数的调用栈信息,显示了 func2()func1() 调用的关系。

通过查看函数的调用栈,您可以更清晰地了解代码执行的路径,有助于定位和解决问题。

console.info()

console.info()可用于输出资讯类说明信息,其用法与console.log()相同,打印效果也相似。

以下是一个示例,展示如何使用 console.info() 方法输出带有信息图标的信息:

javascript 复制代码
console.info('This is an information message');

通过使用 console.info() 方法,您可以将一般的信息以更清晰和易识别的方式输出到控制台中。

上述四种方法中,按照使用的频率排名应该是:log>error>warn>info。

计算时间

  • console.time(label):开始一个计时器,参数 label 用于标识计时器。
  • console.timeEnd(label):结束指定标识的计时器,并输出执行时间。
  • console.timeLog(label):输出指定标识的计时器当前的执行时间,不会停止计时器。

console.time() & console.timeEnd()

console.time()console.timeEnd() 方法是用于在控制台中计算代码执行时间的方法。这两个方法结合使用可以帮助您测量代码块的执行时间,从而进行性能分析和优化。

  • console.time(label): 开始一个计时器,并将计时器命名为指定的标签(label)。可以使用任何字符串作为标签。每个标签对应一个独立的计时器。
  • console.timeEnd(label): 停止指定标签(label)的计时器,并在控制台中输出执行时间,以毫秒(ms)为单位。

以下是一个示例,展示如何使用 console.time()console.timeEnd() 方法来计算代码块的执行时间:

javascript 复制代码
console.time('myTimer');

// 模拟一个耗时操作
let sum = 0;
for (let i = 0; i < 1000000; i++) {
    sum += i;
}

console.timeEnd('myTimer');

在上面的示例中,我们首先使用 console.time('myTimer') 开始一个名为 'myTimer' 的计时器,然后执行一个耗时操作,最后使用 console.timeEnd('myTimer') 停止 'myTimer' 计时器,并输出执行时间到控制台。

通过使用 console.time()console.timeEnd() 方法,您可以方便地测量代码执行时间,帮助您了解代码的性能表现。

如果有多个计时器,就需要使用这个标签来标记每一个计时器:

javascript 复制代码
console.time("timer1");
console.time("timer2");

setTimeout(() => {
    console.timeEnd("timer1");
}, 1000);

setTimeout(() => {
    console.timeEnd("timer2");
}, 2000);

// timer1: 1004.666259765625 ms
// timer2: 2004.654052734375 ms

console.timeLog()

console.timeLog() 方法用于在控制台中记录当前已经经过的时间,console.timeLog()与上面的console.timeEnd()类似,但是也有一定的差别。

这两个方法都需要通过 console.time() 来启动一个计时器,然后可以用来监控代码执行时间。

  • console.timeLog() 用于在代码执行过程中打印计时器的当前时间,而不会终止计时器,这样可以多次记录时间点并输出当前时间
  • console.timeEnd() 用于打印计时器的最终时间,并且会终止计时器,这样可以得到整个代码执行的总时间

通过结合使用这两个方法,我们可以更好地监控代码的执行时间,从而优化性能、调试程序或者分析代码的时间消耗。这种精细的时间监控对于开发和调试复杂的程序非常有帮助。

以下是一个示例,演示如何使用 console.time()console.timeLog()console.timeEnd() 来记录代码块的执行时间并在不同阶段输出已经经过的时间:

javascript 复制代码
console.time('timer');

// 模拟一个耗时操作
let sum = 0;
for (let i = 0; i < 1000000; i++) {
    sum += i;
    if (i % 10000 === 0) {
        console.timeLog('timer', `已经执行 ${i} 次`);
    }
}

console.timeEnd('timer');

在上面的示例中,我们首先使用 console.time('timer') 开始一个名为 'timer' 的计时器,然后在循环中每执行 10000 次操作时使用 console.timeLog('timer', message) 记录已经执行的次数,并输出已经经过的时间。最后使用 console.timeEnd('timer') 停止 'timer' 计时器,并输出总的执行时间。

通过使用 console.timeLog(),您可以在代码执行过程中输出已经经过的时间,帮助您更好地了解代码的执行情况。

在使用 console.timeLog() 方法时,有一些注意点需要考虑,以确保正确使用和获取准确的时间记录:

  1. 计时器名称匹配 :确保在调用 console.timeLog() 方法时,传入的计时器名称要与之前通过 console.time() 启动的计时器名称匹配。否则,将无法输出正确的时间记录。而且中间不能被console.timeEnd(),否则也会导致报错.

  2. 适当的时间点 :选择合适的时间点调用 console.timeLog() 方法,以便获取有意义的时间记录。通常在代码执行的关键部分、循环迭代或异步操作完成后调用,可以更好地了解代码的执行时间分布。

  3. 多次调用console.timeLog() 方法可以多次调用,以记录不同时间点的时间。这有助于分析代码执行过程中的时间消耗情况。但要注意不要过度调用,以避免影响代码执行性能。

  4. 不会终止计时器console.timeLog() 方法并不会终止计时器,只是输出当前时间。如果需要获取整个代码块的总执行时间,应该在适当的时机使用 console.timeEnd() 方法来终止计时器并输出最终时间。

通过注意以上这些点,可以更好地利用 console.timeLog() 方法来监控代码执行时间,帮助调试和优化程序。

计数

  • console.count(label):输出指定标识的调用次数,可以用于统计某个函数被调用的次数。
  • console.countReset(label):重置指定标识的调用次数计数器。

console.count()

console.count() 是一个用于计数的控制台方法,它可以帮助我们统计特定事件发生的次数。当我们在代码中多次调用 console.count() 时,它会输出一个特定事件被调用的次数。

下面是 console.count() 的基本用法和示例:

基本用法

javascript 复制代码
console.count(label);
  • label:可选参数,用于标识计数器的名称。如果提供了 label,则会输出该计数器的名称和次数;如果未提供 label,则会输出默认的次数计数器。

示例

javascript 复制代码
function greet(name) {
    console.log('Hello, ' + name);
    console.count('Greet Count');
}

greet('Alice');
greet('Bob');
greet('Alice');

在上面的示例中,console.count('Greet Count') 会统计 greet() 函数被调用的次数,并输出如下结果:

css 复制代码
Hello, Alice
Greet Count: 1
Hello, Bob
Greet Count: 2
Hello, Alice
Greet Count: 3

通过 console.count() 方法,我们可以方便地统计特定事件的发生次数,有助于在开发过程中跟踪和调试代码。

console.countReset()

console.countReset() 用于重置 console.count() 方法的计数器。调用 console.countReset() 后,计数器将被重置为初始状态,下次调用 console.count() 时,计数器将从零开始计数。

基本用法

javascript 复制代码
console.countReset([label]);
  • label:可选参数,用于指定要重置的计数器的名称。如果提供了 label,则会重置该特定名称的计数器;如果未提供 label,则会重置默认的计数器。

示例

javascript 复制代码
console.count();
console.count("a");
console.count("b");
console.count("a");
console.count("a");
console.count();
console.count();

console.countReset();
console.countReset("a");
console.countReset("b");

console.count();
console.count("a");
console.count("b");

打印结果如下

javascript 复制代码
default:1
a:1
b:1
a:2
a:3
default:2
default:3
default:1
a:1
b:1

通过 console.countReset() 方法,我们可以在需要时重置计数器,以便重新开始计数。这在某些情况下可能很有用,例如在特定事件之后重新开始计数。

其他

  • console.trace():输出当前的调用栈,可以帮助定位函数调用的来源。
  • console.table(data):以表格形式输出数据,方便查看复杂数据结构。
  • console.clear():清空控制台的输出。
  • console.assert(expression, message):如果 expressionfalse,则输出 message 到控制台。

console.trace()

console.trace() 用于在控制台中输出当前的函数调用栈信息。它会显示当前代码的调用路径,从调用 console.trace() 的位置开始,一直到代码执行的起始点。

它和上面提到的console.error()具有相同的功能,不过打印的样式与console.log()相同。

示例

javascript 复制代码
function greet(name) {
    console.trace('Greet function called with name: ' + name);
    console.log('Hello, ' + name);
}

function sayHello() {
    greet('Alice');
}

sayHello();

在上面的示例中,我们定义了两个函数 greet()sayHello()。在 sayHello() 函数中调用了 greet('Alice'),并在 greet() 函数中调用了 console.trace() 方法。当我们运行代码时,console.trace() 将输出类似以下内容的调用栈信息:

这些信息显示了函数调用的路径,从最内部的函数开始,一直到代码执行的起始点。这对于调试和跟踪函数调用路径非常有用。

console.table(data)

console.table(data) 用于以表格形式在控制台中显示数据。它接收一个对象或数组作为参数,并将其以表格的形式呈现出来,使数据更易于查看和理解。

示例

javascript 复制代码
const data = [
    { name: 'Alice', age: 30, city: 'New York' },
    { name: 'Bob', age: 25, city: 'San Francisco' },
    { name: 'Charlie', age: 35, city: 'Los Angeles' }
];

console.table(data);

在上面的示例中,我们定义了一个包含个人信息的数组 data,然后使用 console.table(data) 将数据以表格形式输出到控制台。输出的表格将显示每个对象的属性及其对应的值,使数据更易于查看和比较。

注意

  • console.table() 方法适用于对象和数组,它会自动根据数据的结构生成表格。
  • 表格的列名将根据对象的属性名自动生成。
  • 您可以在表格中显示特定的列,通过传递第二个参数指定要显示的列名数组,例如:console.table(data, ['name', 'age'])

console.clear()

console.clear() 用于清除控制台中的所有输出内容,使控制台变得干净整洁。

示例

javascript 复制代码
console.log('Hello, World!');
console.clear();

在上面的示例中,我们首先使用 console.log() 方法输出了一条消息到控制台,然后调用 console.clear() 方法清除了控制台中的所有内容。这将清除之前的输出,使控制台变为空白。

注意

  • console.clear() 方法通常在需要清除之前的输出并重新开始时使用,以保持控制台的可读性。
  • 在浏览器控制台中,console.clear() 方法通常会清除整个控制台的内容,而在 Node.js 等环境中,可能只会清除当前终端窗口的内容。

console.assert(expression, message)

console.assert(expression, message) 用于在表达式为假时输出一条错误消息到控制台。

  • expression:一个表达式,如果为 false,则会输出错误消息到控制台。
  • message:要输出的错误消息。

示例

javascript 复制代码
const value = 10;
console.assert(value > 20, 'Value is not greater than 20');

在上面的示例中,我们定义了一个变量 value,并使用 console.assert() 方法来检查该变量是否大于 20。由于 value 的值是 10,不大于 20,因此表达式为假,将输出错误消息到控制台。

注意

  • 如果表达式为真,则不会输出任何内容到控制台。
  • console.assert() 方法通常用于在代码中添加断言,用于检查代码的正确性。
  • 错误消息通常会包含有关断言失败的信息,帮助开发人员调试代码。

彩蛋篇

浏览器转为编辑器

作为前端,你开始是不是做过,在一个页面上,打开控制台。在html页面上替换页面的内容,比如热搜等等。 那有没有一种方法,可以在浏览器上直接便捷网页页面的。答案是有的。那要怎么做呢? 打开控制台,在控制台上输入:

javascript 复制代码
document.body.contentEditable = true;
// 或者
document.designMode = "on"

然后就可以随心所欲的改变网页内容了。

浏览器转为记事本

如果你想打开个空页面,并在空页面上可以编辑,你可以在浏览器地址栏中输入 data:text/html, <html contenteditable>回车直接变编辑器,这里可以直接输入字符进行编辑了。

整理不易,如果对你有帮助,你的一个点赞,值得让我付出更多的努力!

相关推荐
Watermelo6179 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_7482489410 分钟前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_7482356122 分钟前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink5 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者7 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-7 小时前
验证码机制
前端·后端
燃先生._.8 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖9 小时前
[react]searchParams转普通对象
开发语言·前端·javascript